1 17 18 package org.apache.geronimo.security; 19 20 import org.apache.geronimo.testsupport.TestSupport; 21 22 import org.apache.geronimo.gbean.AbstractName; 23 import org.apache.geronimo.gbean.GBeanData; 24 import org.apache.geronimo.gbean.GBeanInfo; 25 import org.apache.geronimo.gbean.AbstractNameQuery; 26 import org.apache.geronimo.kernel.Kernel; 27 import org.apache.geronimo.kernel.KernelFactory; 28 import org.apache.geronimo.kernel.repository.Artifact; 29 import org.apache.geronimo.security.jaas.JaasLoginModuleUse; 30 import org.apache.geronimo.security.jaas.LoginModuleGBean; 31 import org.apache.geronimo.security.jaas.GeronimoLoginConfiguration; 32 import org.apache.geronimo.security.jaas.ConfigurationEntryFactory; 33 import org.apache.geronimo.security.jaas.server.JaasLoginService; 34 import org.apache.geronimo.security.realm.GenericSecurityRealm; 35 import org.apache.geronimo.security.realm.SecurityRealm; 36 import org.apache.geronimo.security.remoting.jmx.JaasLoginServiceRemotingServer; 37 import org.apache.geronimo.system.serverinfo.BasicServerInfo; 38 import org.apache.geronimo.system.serverinfo.ServerInfo; 39 40 import javax.management.MalformedObjectNameException ; 41 import javax.management.ObjectName ; 42 import javax.security.auth.callback.Callback ; 43 import javax.security.auth.callback.CallbackHandler ; 44 import javax.security.auth.callback.NameCallback ; 45 import javax.security.auth.callback.PasswordCallback ; 46 import javax.security.auth.callback.UnsupportedCallbackException ; 47 import java.io.IOException ; 48 import java.util.HashMap ; 49 import java.util.Map ; 50 51 52 55 public abstract class AbstractTest extends TestSupport { 56 protected Kernel kernel; 57 protected AbstractName serverInfo; 58 protected AbstractName loginService; 59 protected AbstractName testLoginModule; 60 protected AbstractName testRealm; 61 protected AbstractName serverStub; 62 private static final String REALM_NAME = "test-realm"; 63 protected boolean timeoutTest = false; 64 protected boolean needServerInfo = false; 65 protected AbstractName loginConfiguration; 66 protected boolean needLoginConfiguration; 67 68 protected void setUp() throws Exception { 69 kernel = KernelFactory.newInstance().createKernel("test.kernel"); 70 kernel.boot(); 71 72 GBeanData gbean; 73 74 if (needServerInfo) { 76 gbean = buildGBeanData("name", "ServerInfo", BasicServerInfo.GBEAN_INFO); 77 serverInfo = gbean.getAbstractName(); 78 gbean.setAttribute("baseDirectory", "."); 79 kernel.loadGBean(gbean, ServerInfo.class.getClassLoader()); 80 kernel.startGBean(serverInfo); 81 } 82 if (needLoginConfiguration) { 83 gbean = buildGBeanData("new", "LoginConfiguration", GeronimoLoginConfiguration.getGBeanInfo()); 84 loginConfiguration = gbean.getAbstractName(); 85 gbean.setReferencePattern("Configurations", new AbstractNameQuery(ConfigurationEntryFactory.class.getName())); 86 kernel.loadGBean(gbean, GeronimoLoginConfiguration.class.getClassLoader()); 87 } 88 89 gbean = buildGBeanData("name", "TestLoginService", JaasLoginService.getGBeanInfo()); 90 loginService = gbean.getAbstractName(); 91 gbean.setReferencePattern("Realms", new AbstractNameQuery(SecurityRealm.class.getName())); 92 if (timeoutTest) { 93 gbean.setAttribute("expiredLoginScanIntervalMillis", new Integer (50)); 94 gbean.setAttribute("maxLoginDurationMillis", new Integer (5000)); 95 } 96 gbean.setAttribute("algorithm", "HmacSHA1"); 97 gbean.setAttribute("password", "secret"); 98 kernel.loadGBean(gbean, JaasLoginService.class.getClassLoader()); 99 100 gbean = buildGBeanData("name", "TestLoginModule", LoginModuleGBean.getGBeanInfo()); 101 testLoginModule = gbean.getAbstractName(); 102 gbean.setAttribute("loginModuleClass", "org.apache.geronimo.security.bridge.TestLoginModule"); 103 gbean.setAttribute("serverSide", Boolean.TRUE); 104 gbean.setAttribute("loginDomainName", "TestLoginDomain"); 105 kernel.loadGBean(gbean, LoginModuleGBean.class.getClassLoader()); 106 107 gbean = buildGBeanData("name", "TestLoginModuleUse", JaasLoginModuleUse.getGBeanInfo()); 108 AbstractName testUseName = gbean.getAbstractName(); 109 gbean.setAttribute("controlFlag", "REQUIRED"); 110 gbean.setReferencePattern("LoginModule", testLoginModule); 111 kernel.loadGBean(gbean, JaasLoginModuleUse.class.getClassLoader()); 112 113 gbean = buildGBeanData("name", "SecurityRealm" + REALM_NAME, GenericSecurityRealm.getGBeanInfo()); 114 testRealm = gbean.getAbstractName(); 115 gbean.setAttribute("realmName", REALM_NAME); 116 gbean.setReferencePattern("LoginModuleConfiguration", testUseName); 117 gbean.setReferencePattern("LoginService", loginService); 118 kernel.loadGBean(gbean, GenericSecurityRealm.class.getClassLoader()); 119 120 gbean = buildGBeanData("name", "JaasLoginServiceRemotingServer", JaasLoginServiceRemotingServer.getGBeanInfo()); 121 serverStub = gbean.getAbstractName(); 122 gbean.setAttribute("protocol", "tcp"); 123 gbean.setAttribute("host", "0.0.0.0"); 124 gbean.setAttribute("port", new Integer (4242)); 125 gbean.setReferencePattern("LoginService", loginService); 126 kernel.loadGBean(gbean, JaasLoginServiceRemotingServer.class.getClassLoader()); 127 128 kernel.startGBean(loginService); 129 kernel.startGBean(testLoginModule); 130 kernel.startGBean(testUseName); 131 kernel.startGBean(testRealm); 132 kernel.startGBean(serverStub); 133 } 134 135 protected void tearDown() throws Exception { 136 kernel.stopGBean(serverStub); 137 kernel.stopGBean(testRealm); 138 kernel.stopGBean(loginService); 139 140 kernel.unloadGBean(loginService); 141 kernel.unloadGBean(testRealm); 142 kernel.unloadGBean(testLoginModule); 143 kernel.unloadGBean(serverStub); 144 145 kernel.shutdown(); 146 } 147 148 149 protected GBeanData buildGBeanData(String key, String value, GBeanInfo info) throws MalformedObjectNameException { 150 AbstractName abstractName = buildAbstractName(key, value, info); 151 return new GBeanData(abstractName, info); 152 } 153 154 private AbstractName buildAbstractName(String key, String value, GBeanInfo info) throws MalformedObjectNameException { 155 Map names = new HashMap (); 156 names.put(key, value); 157 return new AbstractName(new Artifact("test", "foo", "1", "car"), names, new ObjectName ("test:" + key + "=" + value)); 158 } 159 160 public static class UsernamePasswordCallback implements CallbackHandler { 161 private final String username; 162 private final String password; 163 164 public UsernamePasswordCallback(String username, String password) { 165 this.username = username; 166 this.password = password; 167 } 168 169 public void handle(Callback [] callbacks) throws IOException , UnsupportedCallbackException { 170 for (int i = 0; i < callbacks.length; i++) { 171 if (callbacks[i] instanceof PasswordCallback ) { 172 ((PasswordCallback ) callbacks[i]).setPassword(password.toCharArray()); 173 } else if (callbacks[i] instanceof NameCallback ) { 174 ((NameCallback ) callbacks[i]).setName(username); 175 } 176 } 177 } 178 } 179 } 180 | Popular Tags |