Author: jgenender Date: Wed Mar 2 18:58:57 2005 New Revision: 156002 URL: http://svn.apache.org/viewcvs?view=rev&rev=156002 Log: Added system var overrides for Security and ssl attributes to the SecurityServiceImpl
Added: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java Modified: geronimo/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java geronimo/trunk/modules/tomcat/src/test/org/apache/geronimo/tomcat/AbstractWebModuleTest.java Modified: geronimo/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml?view=diff&r1=156001&r2=156002 ============================================================================== --- geronimo/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml (original) +++ geronimo/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml Wed Mar 2 18:58:57 2005 @@ -155,6 +155,7 @@ <gbean namePart="SecurityService" class="org.apache.geronimo.security.SecurityServiceImpl"> <attribute name="policyConfigurationFactory">org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory</attribute> + <attribute name="policyProvider">org.apache.geronimo.security.jacc.GeronimoPolicy</attribute> </gbean> <gbean namePart="WebBuilder" class="org.apache.geronimo.jetty.deployment.JettyModuleBuilder"> Modified: geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml?view=diff&r1=156001&r2=156002 ============================================================================== --- geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml (original) +++ geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml Wed Mar 2 18:58:57 2005 @@ -152,7 +152,9 @@ </gbean> <gbean namePart="SecurityService" class="org.apache.geronimo.security.SecurityServiceImpl"> + <reference name="ServerInfo">geronimo.server:name=ServerInfo,*</reference> <attribute name="policyConfigurationFactory">org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory</attribute> + <attribute name="policyProvider">org.apache.geronimo.security.jacc.GeronimoPolicy</attribute> </gbean> <gbean namePart="JaasLoginService" class="org.apache.geronimo.security.jaas.JaasLoginService"> Modified: geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java?view=diff&r1=156001&r2=156002 ============================================================================== --- geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java (original) +++ geronimo/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java Wed Mar 2 18:58:57 2005 @@ -64,6 +64,7 @@ import org.apache.geronimo.kernel.management.State; import org.apache.geronimo.kernel.registry.BasicGBeanRegistry; import org.apache.geronimo.security.SecurityServiceImpl; +import org.apache.geronimo.system.serverinfo.ServerInfo; import org.apache.geronimo.transaction.context.TransactionContextManager; import org.apache.geronimo.transaction.manager.TransactionManagerImpl; import org.apache.geronimo.xbeans.j2ee.ServiceRefHandlerType; @@ -78,6 +79,10 @@ private ObjectName containerName; private ObjectName connectorName; private GBeanData connector; + private GBeanData securityServiceGBean; + private ObjectName securityServiceName; + private ObjectName serverInfoName; + private GBeanData serverInfoGBean; private ObjectName tmName; private ObjectName ctcName; private GBeanData tm; @@ -154,43 +159,43 @@ return null; } }, - new ResourceReferenceBuilder() { + new ResourceReferenceBuilder() { - public Reference createResourceRef(String containerId, Class iface) throws DeploymentException { - return null; - } - - public Reference createAdminObjectRef(String containerId, Class iface) throws DeploymentException { - return null; - } - - public ObjectName locateResourceName(ObjectName query) throws DeploymentException { - return null; - } - - public GBeanData locateActivationSpecInfo(ObjectName resourceAdapterName, String messageListenerInterface) throws DeploymentException { - return null; - } - - public GBeanData locateResourceAdapterGBeanData(ObjectName resourceAdapterModuleName) throws DeploymentException { - return null; - } - - public GBeanData locateAdminObjectInfo(ObjectName resourceAdapterModuleName, String adminObjectInterfaceName) throws DeploymentException { - return null; - } - - public GBeanData locateConnectionFactoryInfo(ObjectName resourceAdapterModuleName, String connectionFactoryInterfaceName) throws DeploymentException { - return null; - } - }, - new ServiceReferenceBuilder() { - //it could return a Service or a Reference, we don't care - public Object createService(Class serviceInterface, URI wsdlURI, URI jaxrpcMappingURI, QName serviceQName, Map portComponentRefMap, List handlerInfos, Map portLocationMap, DeploymentContext deploymentContext, Module module, ClassLoader classLoader) throws DeploymentException { - return null; - } - }, kernel)); - return earContext; + public Reference createResourceRef(String containerId, Class iface) throws DeploymentException { + return null; + } + + public Reference createAdminObjectRef(String containerId, Class iface) throws DeploymentException { + return null; + } + + public ObjectName locateResourceName(ObjectName query) throws DeploymentException { + return null; + } + + public GBeanData locateActivationSpecInfo(ObjectName resourceAdapterName, String messageListenerInterface) throws DeploymentException { + return null; + } + + public GBeanData locateResourceAdapterGBeanData(ObjectName resourceAdapterModuleName) throws DeploymentException { + return null; + } + + public GBeanData locateAdminObjectInfo(ObjectName resourceAdapterModuleName, String adminObjectInterfaceName) throws DeploymentException { + return null; + } + + public GBeanData locateConnectionFactoryInfo(ObjectName resourceAdapterModuleName, String connectionFactoryInterfaceName) throws DeploymentException { + return null; + } + }, + new ServiceReferenceBuilder() { + //it could return a Service or a Reference, we don't care + public Object createService(Class serviceInterface, URI wsdlURI, URI jaxrpcMappingURI, QName serviceQName, Map portComponentRefMap, List handlerInfos, Map portLocationMap, DeploymentContext deploymentContext, Module module, ClassLoader classLoader) throws DeploymentException { + return null; + } + }, kernel)); + return earContext; } private void recursiveDelete(File path) { @@ -209,7 +214,7 @@ cl = this.getClass().getClassLoader(); containerName = NameFactory.getWebComponentName(null, null, null, null, "jettyContainer", "WebResource", moduleContext); connectorName = NameFactory.getWebComponentName(null, null, null, null, "jettyConnector", "WebResource", moduleContext); -// webModuleName = NameFactory.getWebComponentName(null, null, null, null, NameFactory.WEB_MODULE, "WebResource", moduleContext); + // webModuleName = NameFactory.getWebComponentName(null, null, null, null, NameFactory.WEB_MODULE, "WebResource", moduleContext); tmName = NameFactory.getComponentName(null, null, null, null, null, "TransactionManager", NameFactory.JTA_RESOURCE, moduleContext); tcmName = NameFactory.getComponentName(null, null, null, null, null, "TransactionContextManager", NameFactory.JTA_RESOURCE, moduleContext); @@ -229,8 +234,20 @@ ObjectName defaultServlets = ObjectName.getInstance("test:name=test,type=none,*"); ObjectName pojoWebServiceTemplate = null; WebServiceBuilder webServiceBuilder = null; + + serverInfoName = new ObjectName("geronimo.system:name=ServerInfo"); + serverInfoGBean = new GBeanData(serverInfoName, ServerInfo.GBEAN_INFO); + serverInfoGBean.setAttribute("baseDirectory", "."); + start(serverInfoGBean); + //install the policy configuration factory - SecurityServiceImpl securityService = new SecurityServiceImpl(null, "org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory", null); + securityServiceName = new ObjectName("foo:j2eeType=SecurityService"); + securityServiceGBean = new GBeanData(securityServiceName, SecurityServiceImpl.GBEAN_INFO); + securityServiceGBean.setReferencePattern("ServerInfo", serverInfoName); + securityServiceGBean.setAttribute("policyConfigurationFactory", "org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory"); + securityServiceGBean.setAttribute("policyProvider", "org.apache.geronimo.security.jacc.GeronimoPolicy"); + start(securityServiceGBean); + builder = new JettyModuleBuilder(new URI("null"), new Integer(1800), Collections.EMPTY_LIST, containerName, defaultServlets, null, null, pojoWebServiceTemplate, webServiceBuilder, null, kernel); @@ -261,6 +278,8 @@ protected void tearDown() throws Exception { stop(ctcName); stop(tmName); + stop(serverInfoName); + stop(securityServiceName); stop(connectorName); stop(containerName); kernel.shutdown(); Modified: geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java?view=diff&r1=156001&r2=156002 ============================================================================== --- geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java (original) +++ geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java Wed Mar 2 18:58:57 2005 @@ -167,9 +167,15 @@ configurations.add(new ObjectName("geronimo.server:j2eeType=ConfigurationEntry,*")); loginConfigurationGBean.setReferencePatterns("Configurations", configurations); + serverInfoName = new ObjectName("geronimo.system:name=ServerInfo"); + serverInfoGBean = new GBeanData(serverInfoName, ServerInfo.GBEAN_INFO); + serverInfoGBean.setAttribute("baseDirectory", "."); + securityServiceName = new ObjectName("geronimo.server:j2eeType=SecurityService"); securityServiceGBean = new GBeanData(securityServiceName, SecurityServiceImpl.GBEAN_INFO); + securityServiceGBean.setReferencePattern("ServerInfo", serverInfoName); securityServiceGBean.setAttribute("policyConfigurationFactory", "org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory"); + securityServiceGBean.setAttribute("policyProvider", "org.apache.geronimo.security.jacc.GeronimoPolicy"); loginServiceName = JaasLoginService.OBJECT_NAME; loginServiceGBean = new GBeanData(loginServiceName, JaasLoginService.GBEAN_INFO); @@ -178,10 +184,6 @@ loginServiceGBean.setAttribute("algorithm", "HmacSHA1"); loginServiceGBean.setAttribute("password", "secret"); - serverInfoName = new ObjectName("geronimo.system:name=ServerInfo"); - serverInfoGBean = new GBeanData(serverInfoName, ServerInfo.GBEAN_INFO); - serverInfoGBean.setAttribute("baseDirectory", "."); - propertiesLMName = new ObjectName("geronimo.security:type=LoginModule,name=demo-properties-login"); propertiesLMGBean = new GBeanData(propertiesLMName, LoginModuleGBean.GBEAN_INFO); propertiesLMGBean.setAttribute("loginModuleClass", "org.apache.geronimo.security.realm.providers.PropertiesFileLoginModule"); @@ -205,9 +207,9 @@ propertiesRealmGBean.setAttribute("defaultPrincipal", principalEditor.getValue()); start(loginConfigurationGBean); + start(serverInfoGBean); start(securityServiceGBean); start(loginServiceGBean); - start(serverInfoGBean); start(propertiesLMGBean); start(propertiesRealmGBean); @@ -216,9 +218,9 @@ protected void tearDownSecurity() throws Exception { stop(propertiesRealmName); stop(propertiesLMName); - stop(serverInfoName); stop(loginServiceName); stop(securityServiceName); + stop(serverInfoName); stop(loginConfigurationName); } Added: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java?view=auto&rev=156002 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java (added) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java Wed Mar 2 18:58:57 2005 @@ -0,0 +1,26 @@ +/** + * + * Copyright 2003-2005 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geronimo.security; + +public interface SecurityService { + public final static String POLICY_CONFIG_FACTORY = "javax.security.jacc.PolicyConfigurationFactory.provider"; + public final static String POLICY_PROVIDER = "javax.security.jacc.policy.provider"; + public final static String KEYSTORE = "javax.net.ssl.keyStore"; + public final static String KEYSTORE_PASSWORD = "javax.net.ssl.keyStorePassword"; + public final static String TRUSTSTORE = "javax.net.ssl.trustStore"; + public final static String TRUSTSTORE_PASSWORD = "javax.net.ssl.trustStorePassword"; +} Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java?view=diff&r1=156001&r2=156002 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java (original) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java Wed Mar 2 18:58:57 2005 @@ -17,19 +17,19 @@ package org.apache.geronimo.security; -import java.security.Policy; -import javax.security.jacc.PolicyConfigurationFactory; -import javax.security.jacc.PolicyContextException; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; -import org.apache.geronimo.security.jacc.GeronimoPolicy; import org.apache.geronimo.security.jacc.PolicyContextHandlerContainerSubject; import org.apache.geronimo.security.jacc.PolicyContextHandlerHttpServletRequest; import org.apache.geronimo.security.jacc.PolicyContextHandlerSOAPMessage; import org.apache.geronimo.security.util.ConfigurationUtil; +import org.apache.geronimo.system.serverinfo.ServerInfo; + +import javax.security.jacc.PolicyConfigurationFactory; +import javax.security.jacc.PolicyContextException; +import java.security.Policy; /** @@ -37,10 +37,12 @@ * * @version $Rev$ $Date$ */ -public class SecurityServiceImpl { +public class SecurityServiceImpl implements SecurityService { public static boolean POLICY_INSTALLED = false; + private final ServerInfo serverInfo; + private final Log log = LogFactory.getLog(SecurityServiceImpl.class); /** @@ -48,7 +50,13 @@ */ public static final GeronimoSecurityPermission CONFIGURE = new GeronimoSecurityPermission("configure"); - public SecurityServiceImpl(ClassLoader classLoader, String policyConfigurationFactory, String policyProvider) throws PolicyContextException, ClassNotFoundException, IllegalAccessException, InstantiationException { + public SecurityServiceImpl(ClassLoader classLoader, ServerInfo serverInfo, String policyConfigurationFactory, + String policyProvider, String keyStore, String keyStorePassword, + String trustStore, String trustStorePassword) + throws PolicyContextException, ClassNotFoundException, IllegalAccessException, InstantiationException { + + this.serverInfo = serverInfo; + /** * @see "JSR 115 4.6.1" Container Subject Policy Context Handler */ @@ -56,44 +64,51 @@ ConfigurationUtil.registerPolicyContextHandler(new PolicyContextHandlerSOAPMessage(), true); ConfigurationUtil.registerPolicyContextHandler(new PolicyContextHandlerHttpServletRequest(), true); - /** - * javax.security.jacc.PolicyConfigurationFactory.provider gets preference over policyConfigurationFactory - */ - String sysFactory = System.getProperty("javax.security.jacc.PolicyConfigurationFactory.provider"); - if (sysFactory != null) - policyConfigurationFactory = sysFactory; - if (policyConfigurationFactory != null) { - System.setProperty("javax.security.jacc.PolicyConfigurationFactory.provider", policyConfigurationFactory); - } - - /** - * javax.security.jacc.policy.provider gets preference over policyProvider - */ - - if (!POLICY_INSTALLED){ - String sysProvider = System.getProperty("javax.security.jacc.policy.provider"); - if (sysProvider != null) - policyProvider = sysProvider; + if (!POLICY_INSTALLED) { + policyProvider = sysOverRide(policyProvider, POLICY_PROVIDER); if (policyProvider != null) { - System.setProperty("javax.security.jacc.policy.provider", policyProvider); - Policy customPolicy = (Policy) classLoader.loadClass(policyProvider).newInstance(); - customPolicy.refresh(); - Policy.setPolicy(customPolicy); - } else { - Policy gPolicy = new GeronimoPolicy(); - gPolicy.refresh(); - Policy.setPolicy(gPolicy); + Policy policy = (Policy) classLoader.loadClass(policyProvider).newInstance(); + policy.refresh(); + Policy.setPolicy(policy); } POLICY_INSTALLED = true; } - PolicyConfigurationFactory.getPolicyConfigurationFactory(); + policyConfigurationFactory = sysOverRide(policyConfigurationFactory, POLICY_CONFIG_FACTORY); + if (policyConfigurationFactory != null) + PolicyConfigurationFactory.getPolicyConfigurationFactory(); + + if (keyStore != null) + keyStore = sysOverRide(serverInfo.resolvePath(keyStore), KEYSTORE); + sysOverRide(keyStorePassword, KEYSTORE_PASSWORD); + + if (trustStore != null) + trustStore = sysOverRide(serverInfo.resolvePath(trustStore), TRUSTSTORE); + sysOverRide(trustStore, TRUSTSTORE); + sysOverRide(trustStorePassword, TRUSTSTORE_PASSWORD); log.info("JACC factory registered"); } + private String sysOverRide(String attribute, String sysVar) { + + String sysValue = System.getProperty(sysVar); + + /** + * System variable gets highest priority + */ + if (sysValue != null) + return sysValue; + + if (attribute != null) { + System.setProperty(sysVar, attribute); + } + + return attribute; + + } public static final GBeanInfo GBEAN_INFO; @@ -101,10 +116,17 @@ GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(SecurityServiceImpl.class); infoFactory.addAttribute("classLoader", ClassLoader.class, false); + infoFactory.addReference("ServerInfo", ServerInfo.class); infoFactory.addAttribute("policyConfigurationFactory", String.class, true); infoFactory.addAttribute("policyProvider", String.class, true); - - infoFactory.setConstructor(new String[]{"classLoader", "policyConfigurationFactory", "policyProvider"}); + infoFactory.addAttribute("keyStore", String.class, true); + infoFactory.addAttribute("keyStorePassword", String.class, true); + infoFactory.addAttribute("trustStore", String.class, true); + infoFactory.addAttribute("trustStorePassword", String.class, true); + + infoFactory.setConstructor(new String[]{"classLoader", "ServerInfo", "policyConfigurationFactory", + "policyProvider", "keyStore", "keyStorePassword", "trustStore", + "trustStorePassword"}); GBEAN_INFO = infoFactory.getBeanInfo(); } Modified: geronimo/trunk/modules/tomcat/src/test/org/apache/geronimo/tomcat/AbstractWebModuleTest.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/test/org/apache/geronimo/tomcat/AbstractWebModuleTest.java?view=diff&r1=156001&r2=156002 ============================================================================== --- geronimo/trunk/modules/tomcat/src/test/org/apache/geronimo/tomcat/AbstractWebModuleTest.java (original) +++ geronimo/trunk/modules/tomcat/src/test/org/apache/geronimo/tomcat/AbstractWebModuleTest.java Wed Mar 2 18:58:57 2005 @@ -200,7 +200,9 @@ securityServiceName = new ObjectName("geronimo.server:j2eeType=SecurityService"); securityServiceGBean = new GBeanData(securityServiceName, SecurityServiceImpl.GBEAN_INFO); + securityServiceGBean.setReferencePattern("ServerInfo", serverInfoName); securityServiceGBean.setAttribute("policyConfigurationFactory", "org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory"); + securityServiceGBean.setAttribute("policyProvider", "org.apache.geronimo.security.jacc.GeronimoPolicy"); loginServiceName = JaasLoginService.OBJECT_NAME; loginServiceGBean = new GBeanData(loginServiceName, JaasLoginService.GBEAN_INFO);