KickJava   Java API By Example, From Geeks To Geeks.

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


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 package org.apache.geronimo.security.jaas;
18
19 import java.util.HashMap JavaDoc;
20 import java.util.Map JavaDoc;
21 import javax.security.auth.Subject JavaDoc;
22 import javax.security.auth.callback.CallbackHandler JavaDoc;
23 import javax.security.auth.login.LoginException JavaDoc;
24 import javax.security.auth.spi.LoginModule JavaDoc;
25
26 import junit.framework.TestCase;
27
28 import org.apache.geronimo.security.DomainPrincipal;
29 import org.apache.geronimo.security.RealmPrincipal;
30 import org.apache.geronimo.security.jaas.server.JaasLoginModuleConfiguration;
31 import org.apache.geronimo.security.jaas.server.JaasSecuritySession;
32 import org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal;
33
34
35 /**
36  * @version $Rev: 476049 $ $Date: 2006-11-16 23:35:17 -0500 (Thu, 16 Nov 2006) $
37  */

38 public class MultipleLoginDomainTest extends TestCase {
39
40     public void testDummy() throws Exception JavaDoc {
41     }
42
43     /**
44      * this test demonstrates that naming login domains does not actually separate principals from different login domains.
45      * The crucial line is commented out so as to avoid breaking the build.
46      *
47      * @throws Exception
48      */

49     public void testMultipleLoginDomains() throws Exception JavaDoc {
50         JaasLoginModuleConfiguration m1 = new JaasLoginModuleConfiguration(MockLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap JavaDoc(), true, "D1", true, MockLoginModule.class.getClassLoader());
51         JaasLoginModuleConfiguration m2 = new JaasLoginModuleConfiguration(MockLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap JavaDoc(), true, "D2", true, MockLoginModule.class.getClassLoader());
52         JaasLoginModuleConfiguration m3 = new JaasLoginModuleConfiguration(AnotherMockLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap JavaDoc(), false, "D3", false, AnotherMockLoginModule.class.getClassLoader());
53         JaasLoginModuleConfiguration m4 = new JaasLoginModuleConfiguration(AnotherMockLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap JavaDoc(), false, "D4", true, AnotherMockLoginModule.class.getClassLoader());
54         JaasSecuritySession c = new JaasSecuritySession("realm", new JaasLoginModuleConfiguration[]{m1, m2, m3, m4}, new HashMap JavaDoc(), this.getClass().getClassLoader());
55         Subject JavaDoc s = c.getSubject();
56
57         c.getLoginModule(0).initialize(s, null, null, null);
58         c.getLoginModule(1).initialize(s, null, null, null);
59         c.getLoginModule(2).initialize(s, null, null, null);
60         c.getLoginModule(3).initialize(s, null, null, null);
61         c.getLoginModule(0).login();
62         c.getLoginModule(1).login();
63         c.getLoginModule(2).login();
64         c.getLoginModule(3).login();
65         c.getLoginModule(0).commit();
66
67         assertEquals("Subject should have three principals", 3, s.getPrincipals().size());
68         assertEquals("server-side subject should have one realm principal", 1, s.getPrincipals(RealmPrincipal.class).size());
69         assertEquals("server-side subject should have one domain principal", 1, s.getPrincipals(DomainPrincipal.class).size());
70
71         c.getLoginModule(1).commit();
72
73         assertEquals("Subject should now have five principals", 5, s.getPrincipals().size());
74
75         c.getLoginModule(2).commit();
76
77         assertEquals("Subject should now have five principals", 6, s.getPrincipals().size());
78
79         c.getLoginModule(3).commit();
80
81         assertEquals("Subject should now have five principals", 8, s.getPrincipals().size());
82     }
83
84     public static class MockLoginModule implements LoginModule JavaDoc {
85
86         Subject JavaDoc subject;
87
88         public void initialize(Subject JavaDoc subject, CallbackHandler JavaDoc callbackHandler, Map JavaDoc map, Map JavaDoc map1) {
89             this.subject = subject;
90         }
91
92         public boolean login() throws LoginException JavaDoc {
93             return true;
94         }
95
96         public boolean commit() throws LoginException JavaDoc {
97             subject.getPrincipals().add(new GeronimoGroupPrincipal("Foo"));
98             return true;
99         }
100
101         public boolean abort() throws LoginException JavaDoc {
102             return false;
103         }
104
105         public boolean logout() throws LoginException JavaDoc {
106             return false;
107         }
108     }
109
110     public static class AnotherMockLoginModule implements LoginModule JavaDoc {
111
112         Subject JavaDoc subject;
113
114         public void initialize(Subject JavaDoc subject, CallbackHandler JavaDoc callbackHandler, Map JavaDoc map, Map JavaDoc map1) {
115             this.subject = subject;
116         }
117
118         public boolean login() throws LoginException JavaDoc {
119             return true;
120         }
121
122         public boolean commit() throws LoginException JavaDoc {
123             subject.getPrincipals().add(new GeronimoGroupPrincipal("Bar"));
124             return true;
125         }
126
127         public boolean abort() throws LoginException JavaDoc {
128             return false;
129         }
130
131         public boolean logout() throws LoginException JavaDoc {
132             return false;
133         }
134     }
135
136 }
137
Popular Tags