001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.security.jacc.mappingprovider;
019
020 import java.util.HashMap;
021 import java.util.Map;
022 import javax.security.jacc.PolicyConfiguration;
023 import javax.security.jacc.PolicyConfigurationFactory;
024 import javax.security.jacc.PolicyContextException;
025
026 import org.apache.commons.logging.Log;
027 import org.apache.commons.logging.LogFactory;
028 import org.apache.geronimo.security.GeronimoSecurityPermission;
029
030
031 /**
032 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
033 */
034 public class GeronimoPolicyConfigurationFactory extends PolicyConfigurationFactory implements PrincipalRoleConfigurationFactory {
035
036 private static final Log log = LogFactory.getLog(GeronimoPolicyConfigurationFactory.class);
037 private static GeronimoPolicyConfigurationFactory singleton;
038 private Map<String, GeronimoPolicyConfiguration> configurations = new HashMap<String, GeronimoPolicyConfiguration>();
039
040 public GeronimoPolicyConfigurationFactory() {
041 synchronized (GeronimoPolicyConfigurationFactory.class) {
042 if (singleton != null) {
043 log.error("Singleton already assigned. There may be more than one GeronimoPolicyConfigurationFactory being used.");
044 throw new IllegalStateException("Singleton already assigned");
045 }
046 singleton = this;
047 ApplicationPrincipalRoleConfigurationManager.setPrincipalRoleConfigurationFactory(this);
048 }
049 }
050
051 public void setPolicyConfiguration(String contextID, GeronimoPolicyConfiguration configuration) {
052 SecurityManager sm = System.getSecurityManager();
053 if (sm != null) sm.checkPermission(new GeronimoSecurityPermission("setPolicyConfiguration"));
054
055 configurations.put(contextID, configuration);
056
057 log.trace("Set policy configuration " + contextID);
058 }
059
060 public GeronimoPolicyConfiguration getGeronimoPolicyConfiguration(String contextID) throws PolicyContextException {
061 GeronimoPolicyConfiguration configuration = configurations.get(contextID);
062
063 if (configuration == null) {
064 throw new PolicyContextException("No policy configuration registered for contextID: " + contextID);
065 }
066
067 log.trace("Get policy configuration " + contextID);
068 return configuration;
069 }
070
071 public PolicyConfiguration getPolicyConfiguration(String contextID, boolean remove) throws PolicyContextException {
072 GeronimoPolicyConfiguration configuration = configurations.get(contextID);
073
074 if (configuration == null) {
075 configuration = new PolicyConfigurationGeneric(contextID);
076 configurations.put(contextID, configuration);
077 } else {
078 configuration.open(remove);
079 }
080
081 log.trace("Get " + (remove ? "CLEANED" : "") + " policy configuration " + contextID);
082 return configuration;
083 }
084
085 public boolean inService(String contextID) throws PolicyContextException {
086 PolicyConfiguration configuration = getPolicyConfiguration(contextID, false);
087
088 log.trace("Policy configuration " + contextID + " put into service");
089 return configuration.inService();
090 }
091
092 static GeronimoPolicyConfigurationFactory getSingleton() {
093 return singleton;
094 }
095
096 public PrincipalRoleConfiguration getPrincipalRoleConfiguration(String contextID) throws PolicyContextException {
097 return getGeronimoPolicyConfiguration(contextID);
098 }
099 }