1 17 package org.apache.geronimo.security.jaas; 18 19 import java.util.HashMap ; 20 import java.util.Map ; 21 import javax.security.auth.Subject ; 22 import javax.security.auth.callback.CallbackHandler ; 23 import javax.security.auth.login.LoginException ; 24 import javax.security.auth.spi.LoginModule ; 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 38 public class MultipleLoginDomainTest extends TestCase { 39 40 public void testDummy() throws Exception { 41 } 42 43 49 public void testMultipleLoginDomains() throws Exception { 50 JaasLoginModuleConfiguration m1 = new JaasLoginModuleConfiguration(MockLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap (), true, "D1", true, MockLoginModule.class.getClassLoader()); 51 JaasLoginModuleConfiguration m2 = new JaasLoginModuleConfiguration(MockLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap (), true, "D2", true, MockLoginModule.class.getClassLoader()); 52 JaasLoginModuleConfiguration m3 = new JaasLoginModuleConfiguration(AnotherMockLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap (), false, "D3", false, AnotherMockLoginModule.class.getClassLoader()); 53 JaasLoginModuleConfiguration m4 = new JaasLoginModuleConfiguration(AnotherMockLoginModule.class.getName(), LoginModuleControlFlag.REQUIRED, new HashMap (), false, "D4", true, AnotherMockLoginModule.class.getClassLoader()); 54 JaasSecuritySession c = new JaasSecuritySession("realm", new JaasLoginModuleConfiguration[]{m1, m2, m3, m4}, new HashMap (), this.getClass().getClassLoader()); 55 Subject 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 { 85 86 Subject subject; 87 88 public void initialize(Subject subject, CallbackHandler callbackHandler, Map map, Map map1) { 89 this.subject = subject; 90 } 91 92 public boolean login() throws LoginException { 93 return true; 94 } 95 96 public boolean commit() throws LoginException { 97 subject.getPrincipals().add(new GeronimoGroupPrincipal("Foo")); 98 return true; 99 } 100 101 public boolean abort() throws LoginException { 102 return false; 103 } 104 105 public boolean logout() throws LoginException { 106 return false; 107 } 108 } 109 110 public static class AnotherMockLoginModule implements LoginModule { 111 112 Subject subject; 113 114 public void initialize(Subject subject, CallbackHandler callbackHandler, Map map, Map map1) { 115 this.subject = subject; 116 } 117 118 public boolean login() throws LoginException { 119 return true; 120 } 121 122 public boolean commit() throws LoginException { 123 subject.getPrincipals().add(new GeronimoGroupPrincipal("Bar")); 124 return true; 125 } 126 127 public boolean abort() throws LoginException { 128 return false; 129 } 130 131 public boolean logout() throws LoginException { 132 return false; 133 } 134 } 135 136 } 137 | Popular Tags |