KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > security > jaas > GeronimoLoginConfiguration


1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18 package org.apache.geronimo.security.jaas;
19
20 import java.util.Collection JavaDoc;
21 import java.util.Collections JavaDoc;
22 import java.util.Hashtable JavaDoc;
23 import java.util.Iterator JavaDoc;
24 import java.util.Map JavaDoc;
25 import javax.security.auth.login.AppConfigurationEntry JavaDoc;
26 import javax.security.auth.login.Configuration JavaDoc;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30 import org.apache.geronimo.gbean.GBeanInfo;
31 import org.apache.geronimo.gbean.GBeanInfoBuilder;
32 import org.apache.geronimo.gbean.GBeanLifecycle;
33 import org.apache.geronimo.gbean.ReferenceCollection;
34 import org.apache.geronimo.gbean.ReferenceCollectionEvent;
35 import org.apache.geronimo.gbean.ReferenceCollectionListener;
36 import org.apache.geronimo.security.SecurityServiceImpl;
37 import org.apache.geronimo.security.jaas.server.JaasLoginModuleConfiguration;
38
39
40 /**
41  * A JAAS configuration mechanism (associating JAAS configuration names with
42  * specific LoginModule configurations). This is a drop-in replacement for the
43  * normal file-reading JAAS configuration mechanism. Instead of getting
44  * its configuration from its file, it gets its configuration from other
45  * GBeans running in Geronimo.
46  *
47  * @version $Rev: 476049 $ $Date: 2006-11-16 23:35:17 -0500 (Thu, 16 Nov 2006) $
48  */

49 public class GeronimoLoginConfiguration extends Configuration JavaDoc implements GBeanLifecycle, ReferenceCollectionListener {
50
51     private final Log log = LogFactory.getLog(GeronimoLoginConfiguration.class);
52     private static Map JavaDoc entries = new Hashtable JavaDoc();
53     private Configuration JavaDoc oldConfiguration;
54     private Collection JavaDoc configurations = Collections.EMPTY_SET;
55
56
57     public Collection JavaDoc getConfigurations() {
58         SecurityManager JavaDoc sm = System.getSecurityManager();
59         if (sm != null) sm.checkPermission(SecurityServiceImpl.CONFIGURE);
60
61         return configurations;
62     }
63
64     public void setConfigurations(Collection JavaDoc configurations) {
65         SecurityManager JavaDoc sm = System.getSecurityManager();
66         if (sm != null) sm.checkPermission(SecurityServiceImpl.CONFIGURE);
67
68         if (configurations instanceof ReferenceCollection) {
69             ReferenceCollection ref = (ReferenceCollection) configurations;
70             ref.addReferenceCollectionListener(this);
71         }
72
73         this.configurations = configurations;
74
75         for (Iterator JavaDoc iter = configurations.iterator(); iter.hasNext();) {
76             addConfiguration((ConfigurationEntryFactory) iter.next());
77         }
78     }
79
80     public AppConfigurationEntry JavaDoc[] getAppConfigurationEntry(String JavaDoc name) {
81         AppConfigurationEntry JavaDoc entry = (AppConfigurationEntry JavaDoc) entries.get(name);
82
83         if (entry == null) return null;
84
85         return new AppConfigurationEntry JavaDoc[]{entry};
86     }
87
88     public void refresh() {
89     }
90
91     public void memberAdded(ReferenceCollectionEvent event) {
92         SecurityManager JavaDoc sm = System.getSecurityManager();
93         if (sm != null) sm.checkPermission(SecurityServiceImpl.CONFIGURE);
94
95         ConfigurationEntryFactory factory = (ConfigurationEntryFactory) event.getMember();
96         addConfiguration(factory);
97     }
98
99     public void memberRemoved(ReferenceCollectionEvent event) {
100         SecurityManager JavaDoc sm = System.getSecurityManager();
101         if (sm != null) sm.checkPermission(SecurityServiceImpl.CONFIGURE);
102
103         ConfigurationEntryFactory factory = (ConfigurationEntryFactory) event.getMember();
104
105         entries.remove(factory.getConfigurationName());
106         log.debug("Removed Application Configuration Entry " + factory.getConfigurationName());
107     }
108
109     private final void addConfiguration(ConfigurationEntryFactory factory) {
110         JaasLoginModuleConfiguration config = factory.generateConfiguration();
111         if(config.getLoginDomainName() == null) {
112             throw new IllegalArgumentException JavaDoc("A login module to be registered standalone must have a domain name!");
113         }
114         if (entries.containsKey(factory.getConfigurationName())) {
115             throw new java.lang.IllegalArgumentException JavaDoc("ConfigurationEntry already registered");
116         }
117         AppConfigurationEntry JavaDoc ace = new AppConfigurationEntry JavaDoc(config.getLoginModuleClassName(), config.getFlag().getFlag(), config.getOptions());
118
119         entries.put(factory.getConfigurationName(), ace);
120         log.debug("Added Application Configuration Entry " + factory.getConfigurationName());
121     }
122
123     public void doStart() throws Exception JavaDoc {
124         try {
125             oldConfiguration = Configuration.getConfiguration();
126         } catch (SecurityException JavaDoc e) {
127             oldConfiguration = null;
128         }
129         Configuration.setConfiguration(this);
130         log.debug("Installed Geronimo login configuration");
131     }
132
133     public void doStop() throws Exception JavaDoc {
134         Configuration.setConfiguration(oldConfiguration);
135
136         for (Iterator JavaDoc iter = entries.keySet().iterator(); iter.hasNext();){
137             log.debug("Removed Application Configuration Entry " + iter.next());
138         }
139         entries.clear();
140
141         log.debug("Uninstalled Geronimo login configuration");
142     }
143
144     public void doFail() {
145         Configuration.setConfiguration(oldConfiguration);
146         log.debug("Uninstalled Geronimo login configuration");
147     }
148
149     public static GBeanInfo getGBeanInfo() {
150         return GBEAN_INFO;
151     }
152
153     private static final GBeanInfo GBEAN_INFO;
154
155     static {
156         GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(GeronimoLoginConfiguration.class); //just a gbean
157
infoFactory.addReference("Configurations", ConfigurationEntryFactory.class, null);
158
159         GBEAN_INFO = infoFactory.getBeanInfo();
160     }
161
162 }
163
Popular Tags