1 17 package org.apache.geronimo.tomcat; 18 19 import java.io.File ; 20 import java.net.URI ; 21 import java.net.URL ; 22 import java.util.Collections ; 23 import java.util.HashMap ; 24 import java.util.Map ; 25 import java.util.Properties ; 26 27 import javax.transaction.TransactionManager ; 28 29 import org.apache.geronimo.testsupport.TestSupport; 30 31 import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator; 32 import org.apache.geronimo.connector.outbound.connectiontracking.GeronimoTransactionListener; 33 import org.apache.geronimo.security.SecurityServiceImpl; 34 import org.apache.geronimo.security.deploy.PrincipalInfo; 35 import org.apache.geronimo.security.jaas.GeronimoLoginConfiguration; 36 import org.apache.geronimo.security.jaas.JaasLoginModuleUse; 37 import org.apache.geronimo.security.jaas.LoginModuleGBean; 38 import org.apache.geronimo.security.jaas.server.JaasLoginService; 39 import org.apache.geronimo.security.jacc.ApplicationPolicyConfigurationManager; 40 import org.apache.geronimo.security.jacc.ApplicationPrincipalRoleConfigurationManager; 41 import org.apache.geronimo.security.jacc.ComponentPermissions; 42 import org.apache.geronimo.security.jacc.PrincipalRoleMapper; 43 import org.apache.geronimo.security.realm.GenericSecurityRealm; 44 import org.apache.geronimo.system.serverinfo.BasicServerInfo; 45 import org.apache.geronimo.system.serverinfo.ServerInfo; 46 import org.apache.geronimo.tomcat.util.SecurityHolder; 47 import org.apache.geronimo.transaction.manager.TransactionManagerImpl; 48 49 50 53 public abstract class AbstractWebModuleTest extends TestSupport { 54 55 protected ClassLoader cl; 56 protected final static String securityRealmName = "demo-properties-realm"; 57 private ConnectorGBean connector; 58 protected TomcatContainer container; 59 private TransactionManager transactionManager; 60 private ConnectionTrackingCoordinator connectionTrackingCoordinator; 61 62 protected static final String POLICY_CONTEXT_ID = "securetest"; 63 private GeronimoLoginConfiguration loginConfiguration; 64 65 protected TomcatWebAppContext setUpInsecureAppContext(URI relativeWebAppRoot, URL configurationBaseURL, SecurityHolder securityHolder, ObjectRetriever tomcatRealm, ValveGBean valveChain) throws Exception { 66 67 TomcatWebAppContext app = new TomcatWebAppContext(cl, 68 null, 69 null, 70 new URL (configurationBaseURL, relativeWebAppRoot.getPath()), 71 securityHolder, 72 null, 73 Collections.EMPTY_MAP, 74 null, 75 null, 76 transactionManager, 77 connectionTrackingCoordinator, 78 container, 79 tomcatRealm, 80 valveChain, 81 null, 82 false, 83 false, 84 null, 85 null, 86 null, 87 null); 88 app.setContextPath("/test"); 89 app.doStart(); 90 return app; 91 } 92 93 protected TomcatWebAppContext setUpSecureAppContext(Map roleDesignates, Map principalRoleMap, ComponentPermissions componentPermissions, RealmGBean realm, SecurityHolder securityHolder) throws Exception { 94 PrincipalRoleMapper roleMapper = new ApplicationPrincipalRoleConfigurationManager(principalRoleMap); 95 Map contextIDToPermissionsMap = new HashMap (); 96 contextIDToPermissionsMap.put(POLICY_CONTEXT_ID, componentPermissions); 97 ApplicationPolicyConfigurationManager jacc = new ApplicationPolicyConfigurationManager(contextIDToPermissionsMap, roleDesignates, cl, roleMapper); 98 jacc.doStart(); 99 100 URL configurationBaseURL = new File (BASEDIR, "target/var/catalina/webapps/war3/WEB-INF/web.xml").toURL(); 101 return setUpInsecureAppContext(new File (BASEDIR, "target/var/catalina/webapps/war3/").toURI(), 102 configurationBaseURL, 103 securityHolder, 104 realm, 105 null); 106 } 107 108 protected void setUpSecurity() throws Exception { 109 String domainName = "demo-properties-realm"; 110 111 ServerInfo serverInfo = new BasicServerInfo("."); 112 113 new SecurityServiceImpl(cl, serverInfo, "org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory", "org.apache.geronimo.security.jacc.GeronimoPolicy", null, null, null, null); 114 115 Properties options = new Properties (); 116 options.setProperty("usersURI", new File (BASEDIR, "src/test/resources/data/users.properties").toURI().toString()); 117 options.setProperty("groupsURI", new File (BASEDIR, "src/test/resources/data/groups.properties").toURI().toString()); 118 119 LoginModuleGBean loginModule = new LoginModuleGBean("org.apache.geronimo.security.realm.providers.PropertiesFileLoginModule", null, true, true, cl); 120 loginModule.setLoginDomainName(domainName); 121 loginModule.setOptions(options); 122 123 JaasLoginModuleUse loginModuleUse = new JaasLoginModuleUse(loginModule, null, "REQUIRED", null); 124 125 JaasLoginService loginService = new JaasLoginService("HmacSHA1", "secret", cl, null); 126 127 PrincipalInfo.PrincipalEditor principalEditor = new PrincipalInfo.PrincipalEditor(); 128 principalEditor.setAsText("metro,org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal,false"); 129 GenericSecurityRealm realm = new GenericSecurityRealm(domainName, loginModuleUse, true, true, (PrincipalInfo) principalEditor.getValue(), serverInfo, cl, null, loginService); 130 131 loginService.setRealms(Collections.singleton(realm)); 132 loginService.doStart(); 133 134 loginConfiguration = new GeronimoLoginConfiguration(); 135 loginConfiguration.setConfigurations(Collections.singleton(realm)); 136 loginConfiguration.doStart(); 137 138 } 139 140 protected void tearDownSecurity() throws Exception { 141 loginConfiguration.doStop(); 142 } 143 144 protected void init(String realmClass) throws Exception { 145 cl = this.getClass().getClassLoader(); 146 147 RealmGBean realm = null; 148 if (realmClass != null) { 149 Map initParams = new HashMap (); 150 initParams.put("userClassNames", "org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"); 151 initParams.put("roleClassNames", "org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"); 152 realm = new RealmGBean(realmClass, initParams); 153 realm.doStart(); 154 } 155 156 Map initParams = new HashMap (); 158 initParams.put("workDir", "work"); 159 initParams.put("name", "localhost"); 160 initParams.put("appBase", ""); 161 162 HostGBean host = new HostGBean("org.apache.catalina.core.StandardHost", initParams, null, realm, null, null); 163 initParams = Collections.singletonMap("name", "Geronimo"); 165 166 EngineGBean engine = new EngineGBean("org.apache.geronimo.tomcat.TomcatEngine", 167 initParams, 168 host, 169 Collections.singleton(host), 170 realm, 171 null, 172 null); 173 engine.doStart(); 174 175 ServerInfo serverInfo = new BasicServerInfo("."); 176 container = new TomcatContainer(cl, new File (BASEDIR, "target/var/catalina").toString(), engine, serverInfo, null, null); 177 container.doStart(); 178 179 connector = new ConnectorGBean("HTTP", null, "localhost", 8181, container); 180 connector.doStart(); 181 182 TransactionManagerImpl transactionManager = new TransactionManagerImpl(); 183 this.transactionManager = transactionManager; 184 connectionTrackingCoordinator = new ConnectionTrackingCoordinator(); 185 transactionManager.addTransactionAssociationListener(new GeronimoTransactionListener(connectionTrackingCoordinator)); 186 } 187 188 protected void tearDown() throws Exception { 189 connector.doStop(); 190 super.tearDown(); 191 } 192 } 193 | Popular Tags |