JPolicyConfigurationFactory.java

00001 
00027 package org.objectweb.jonas_lib.security.jacc;
00028 
00029 
00030 import java.security.SecurityPermission;
00031 import java.util.HashMap;
00032 import java.util.Map;
00033 
00034 import javax.security.jacc.PolicyConfiguration;
00035 import javax.security.jacc.PolicyConfigurationFactory;
00036 import javax.security.jacc.PolicyContextException;
00037 
00038 import org.objectweb.util.monolog.api.BasicLevel;
00039 import org.objectweb.util.monolog.api.Logger;
00040 
00041 import org.objectweb.jonas_lib.I18n;
00042 
00043 import org.objectweb.common.TraceCore;
00044 
00049 public class JPolicyConfigurationFactory extends PolicyConfigurationFactory {
00050 
00054     public static final String FACTORY_NAME = "org.objectweb.jonas_lib.security.jacc.JPolicyConfigurationFactory";
00055 
00059     private static I18n i18n = I18n.getInstance(JPolicyConfigurationFactory.class);
00060 
00065     private Map policyConfigurations = null;
00066 
00070     private static Logger logger = null;
00071 
00075     public JPolicyConfigurationFactory() {
00076         policyConfigurations = new HashMap();
00077         logger = TraceCore.sec;
00078 
00079     }
00080 
00105     public PolicyConfiguration getPolicyConfiguration(String contextID, boolean remove) throws PolicyContextException, SecurityException {
00106 
00107         // Section 3.3 - Check permissions
00108         checkSetPolicy();
00109 
00110 
00111         // Get in cache
00112         PolicyConfiguration policyConfiguration = getInternalPolicyConfiguration(contextID);
00113 
00114         // Is there an existing configuration ?
00115         if (policyConfiguration != null) {
00116             // Need to be removed ?
00117             if (remove) {
00118                 // Delete permissions
00119                 policyConfiguration.delete();
00120                 ((JPolicyConfiguration) policyConfiguration).resetState();
00121             }
00122             // return cache
00123             return policyConfiguration;
00124         } else { //No previous PolicyConfiguration for the specific contextID
00125             // need to build a new PolicyConfiguration
00126             policyConfiguration = new JPolicyConfiguration(contextID);
00127         }
00128 
00129         // Add in cache and return it.
00130         policyConfigurations.put(contextID, policyConfiguration);
00131 
00132         return policyConfiguration;
00133 
00134     }
00135 
00136 
00147     private synchronized PolicyConfiguration getInternalPolicyConfiguration(String contextID) {
00148         // Get in cache
00149         return (PolicyConfiguration) policyConfigurations.get(contextID);
00150     }
00151 
00152 
00168     public boolean inService(String contextID) throws PolicyContextException, SecurityException {
00169 
00170         if (logger.isLoggable(BasicLevel.DEBUG)) {
00171             logger.log(BasicLevel.DEBUG, "Check setpolicy...");
00172         }
00173 
00174         // Section 3.3 - Check permissions
00175         checkSetPolicy();
00176 
00177         if (logger.isLoggable(BasicLevel.DEBUG)) {
00178             logger.log(BasicLevel.DEBUG, "Context exist ?");
00179         }
00180 
00181         // Context exists ?
00182         if (policyConfigurations.containsKey(contextID)) {
00183             if (logger.isLoggable(BasicLevel.DEBUG)) {
00184                 logger.log(BasicLevel.DEBUG, "Look internal config...");
00185             }
00186             return getInternalPolicyConfiguration(contextID).inService();
00187         } else {
00188             // false otherwise (see javaDoc)
00189             if (logger.isLoggable(BasicLevel.DEBUG)) {
00190                 logger.log(BasicLevel.DEBUG, "Policy configuration not found, return false");
00191             }
00192             return false;
00193         }
00194     }
00195 
00204     private void checkSetPolicy() throws SecurityException {
00205         SecurityManager securityManager = System.getSecurityManager();
00206         if (securityManager != null) {
00207             securityManager.checkPermission(new SecurityPermission("setPolicy"));
00208         }
00209     }
00210 
00211 
00212 }

Generated on Tue Feb 15 15:05:56 2005 for JOnAS by  doxygen 1.3.9.1