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
00108 checkSetPolicy();
00109
00110
00111
00112 PolicyConfiguration policyConfiguration = getInternalPolicyConfiguration(contextID);
00113
00114
00115 if (policyConfiguration != null) {
00116
00117 if (remove) {
00118
00119 policyConfiguration.delete();
00120 ((JPolicyConfiguration) policyConfiguration).resetState();
00121 }
00122
00123 return policyConfiguration;
00124 } else {
00125
00126 policyConfiguration = new JPolicyConfiguration(contextID);
00127 }
00128
00129
00130 policyConfigurations.put(contextID, policyConfiguration);
00131
00132 return policyConfiguration;
00133
00134 }
00135
00136
00147 private synchronized PolicyConfiguration getInternalPolicyConfiguration(String contextID) {
00148
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
00175 checkSetPolicy();
00176
00177 if (logger.isLoggable(BasicLevel.DEBUG)) {
00178 logger.log(BasicLevel.DEBUG, "Context exist ?");
00179 }
00180
00181
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
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 }