Author: djencks Date: Wed Dec 1 23:22:43 2004 New Revision: 109464 URL: http://svn.apache.org/viewcvs?view=rev&rev=109464 Log: implementation of direct-to-gbean jetty deployer Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war4/ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war4/WEB-INF/ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war4/WEB-INF/web.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war4/war/ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Filter1.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Filter2.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Servlet1.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Servlet2.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyFilterHolder.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyFilterMapping.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletRegistration.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java Removed: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppHandler.java Modified: geronimo/branches/djencks/jetty-deployer1/trunk/applications/demo/src/webapp/WEB-INF/geronimo-jetty.xml geronimo/branches/djencks/jetty-deployer1/trunk/etc/version-info.ent geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/project.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-runtime-deployer-plan.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-secure-plan.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-server-plan.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/j2eeobjectnames/NameFactory.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/schema/geronimo-jetty.xsd geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war3/WEB-INF/geronimo-web.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/plans/plan1.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/project.xml geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ApplicationTest.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/BaseSecurityTest.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/SecurityTest.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/GBeanResourceEnvironmentBuilder.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/ContextManager.java geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java
Modified: geronimo/branches/djencks/jetty-deployer1/trunk/applications/demo/src/webapp/WEB-INF/geronimo-jetty.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/applications/demo/src/webapp/WEB-INF/geronimo-jetty.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/applications/demo/src/webapp/WEB-INF/geronimo-jetty.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/applications/demo/src/webapp/WEB-INF/geronimo-jetty.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/applications/demo/src/webapp/WEB-INF/geronimo-jetty.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/applications/demo/src/webapp/WEB-INF/geronimo-jetty.xml Wed Dec 1 23:22:43 2004 @@ -24,18 +24,19 @@ <context-root>/demo</context-root> <context-priority-classloader>false</context-priority-classloader> - <sec:security> - <sec:default-principal realm-name="demo-properties-realm"> - <sec:principal class="org.apache.geronimo.security.realm.providers.PropertiesFileUserPrincipal" name="izumi"/> - </sec:default-principal> - <sec:role-mappings> - <sec:role role-name="content-administrator"> - <sec:realm realm-name="demo-properties-realm"> - <sec:principal class="org.apache.geronimo.security.realm.providers.PropertiesFileGroupPrincipal" name="it" designated-run-as="true"/> - <sec:principal class="org.apache.geronimo.security.realm.providers.PropertiesFileUserPrincipal" name="metro"/> - <sec:principal class="org.apache.geronimo.security.realm.providers.PropertiesFileUserPrincipal" name="george"/> - </sec:realm> - </sec:role> - </sec:role-mappings> - </sec:security> + <login-domain-name>demo-properties-realm</login-domain-name> + <security> + <default-principal realm-name="demo-properties-realm"> + <principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" name="izumi"/> + </default-principal> + <role-mappings> + <role role-name="content-administrator"> + <realm realm-name="demo-properties-realm"> + <principal class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal" name="it" designated-run-as="true"/> + <principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" name="metro"/> + <principal class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" name="george"/> + </realm> + </role> + </role-mappings> + </security> </web-app> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/etc/version-info.ent Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/etc/version-info.ent?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/etc/version-info.ent&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/etc/version-info.ent&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/etc/version-info.ent (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/etc/version-info.ent Wed Dec 1 23:22:43 2004 @@ -61,11 +61,12 @@ <!ENTITY ews-version "SNAPSHOT"> <!ENTITY howl-version "0.1.8-SNAPSHOT"> <!ENTITY hsqldb-version "1.7.2.2"> +<!ENTITY jasper-version "5.0.28"> <!ENTITY javacc-version "2.1"> <!ENTITY jaxb-ri-version "SNAPSHOT"> <!ENTITY jdbm-version "0.20-dev"> <!ENTITY jelly-velocity-tags-version "SNAPSHOT"> -<!ENTITY jetty-version "5.1.0"> +<!ENTITY jetty-version "5.1.1RC1"> <!ENTITY jgroups-version "2.2.5"> <!ENTITY jmock-version "1.0.1"> <!ENTITY jrms-version "1.1"> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/project.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/project.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/project.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/project.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/project.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/project.xml Wed Dec 1 23:22:43 2004 @@ -651,7 +651,7 @@ <properties> <lib>true</lib> <deploy>true</deploy> - <server>true</server><!-- TODO REMOVE WHEN XMLBEANS CL IS FIXED --> + <server>true</server> <repository>true</repository> </properties> </dependency> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-deployer-plan.xml Wed Dec 1 23:22:43 2004 @@ -110,6 +110,24 @@ <uri>geronimo/jars/geronimo-client-${geronimo_version}.jar</uri> </dependency> + <!--jetty dependencies--> + <dependency> + <uri>jetty/jars/org.mortbay.jetty-${jetty_version}.jar</uri> + </dependency> + <dependency> + <uri>tomcat/jars/jasper-compiler-${jasper_version}.jar</uri> + </dependency> + <dependency> + <uri>tomcat/jars/jasper-runtime-${jasper_version}.jar</uri> + </dependency> + <dependency> + <uri>commons-el/jars/commons-el-${commons_el_version}.jar</uri> + </dependency> + <dependency> + <uri>ant/jars/ant-${ant_version}.jar</uri> + </dependency> + + <gbean name="geronimo.deployment:role=Deployer,config=org/apache/geronimo/J2EEDeployer" class="org.apache.geronimo.deployment.Deployer"> <reference name="Builders">geronimo.deployer:role=Builder,config=org/apache/geronimo/J2EEDeployer,*</reference> <reference name="Store">geronimo.deployment:role=ConfigurationStore,type=Local</reference> @@ -136,9 +154,44 @@ <reference name="AppClientConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=AppClient,config=org/apache/geronimo/J2EEDeployer</reference> </gbean> + <!--can this SecurityService actually do anything in this configuration???--> + <gbean name="geronimo.deployer:type=SecurityService" class="org.apache.geronimo.security.SecurityServiceImpl"> + <attribute name="policyConfigurationFactory" type="java.lang.String">org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory</attribute> + <reference name="Realms">geronimo.security:type=SecurityRealm,*</reference> + </gbean> + <gbean name="geronimo.deployer:role=ModuleBuilder,type=Web,config=org/apache/geronimo/J2EEDeployer" class="org.apache.geronimo.jetty.deployment.JettyModuleBuilder"> <attribute name="defaultParentId">org/apache/geronimo/Server</attribute> - <!-- reference name="SecurityService">geronimo.security:type=SecurityService</reference --> + <attribute name="defaultSessionTimeoutSeconds">1800</attribute> + <attribute name="defaultWelcomeFiles">index.html,index.htm,index.jsp</attribute> + <attribute name="jettyContainerObjectName">geronimo.server:type=WebContainer,container=Jetty</attribute> + <reference name="SecurityService">geronimo.deployer:type=SecurityService</reference> + <attribute name="defaultServlets">geronimo.deployer:role=DefaultServlet,config=org/apache/geronimo/J2EEDeployer,*</attribute> + </gbean> + + <gbean name="geronimo.deployer:role=DefaultServlet,config=org/apache/geronimo/J2EEDeployer,name=StaticContent" class="org.apache.geronimo.jetty.JettyServletHolder"> + <attribute name="servletName">default</attribute> + <attribute name="servletClass">org.mortbay.jetty.servlet.Default</attribute> + <attribute name="loadOnStartup">0</attribute> + <attribute name="initParams"> + acceptRanges=true + dirAllowed=true + putAllowed=false + delAllowed=false + redirectWelcome=false + minGzipLength=8192</attribute> + <attribute name="servletMappings">/</attribute> + </gbean> + + <gbean name="geronimo.deployer:role=DefaultServlet,config=org/apache/geronimo/J2EEDeployer,name=JSPServlet" class="org.apache.geronimo.jetty.JettyServletHolder"> + <attribute name="servletName">jsp</attribute> + <attribute name="servletClass">org.apache.jasper.servlet.JspServlet</attribute> + <attribute name="loadOnStartup">0</attribute> + <attribute name="initParams"> + logVerbosityLevel=DEBUG + fork=false + xpoweredBy=false</attribute> + <attribute name="servletMappings">*.jsp,*.jspf,*.jspx,*.xsp</attribute> </gbean> <gbean name="geronimo.deployer:role=ModuleBuilder,type=EJB,config=org/apache/geronimo/J2EEDeployer" class="org.openejb.deployment.OpenEJBModuleBuilder"> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-runtime-deployer-plan.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-runtime-deployer-plan.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-runtime-deployer-plan.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-runtime-deployer-plan.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-runtime-deployer-plan.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-runtime-deployer-plan.xml Wed Dec 1 23:22:43 2004 @@ -60,17 +60,17 @@ <!-- deployer gbeans --> - <gbean name="geronimo.deployment:role=Deployer,config=org/apache/geronimo/Server" class="org.apache.geronimo.deployment.Deployer"> - <reference name="Builders">geronimo.deployer:role=Builder,config=org/apache/geronimo/Server,*</reference> + <gbean name="geronimo.deployment:role=Deployer,config=org/apache/geronimo/RuntimeDeployer" class="org.apache.geronimo.deployment.Deployer"> + <reference name="Builders">geronimo.deployer:role=Builder,config=org/apache/geronimo/RuntimeDeployer,*</reference> <reference name="Store">geronimo.system:role=ConfigurationStore,type=Local</reference> </gbean> - <gbean name="geronimo.deployer:role=Builder,type=Service,config=org/apache/geronimo/Server" class="org.apache.geronimo.deployment.service.ServiceConfigBuilder"> + <gbean name="geronimo.deployer:role=Builder,type=Service,config=org/apache/geronimo/RuntimeDeployer" class="org.apache.geronimo.deployment.service.ServiceConfigBuilder"> <attribute name="defaultParentId">org/apache/geronimo/Server</attribute> <reference name="Repository">*:role=Repository,*</reference> </gbean> - <gbean name="geronimo.deployer:role=Builder,type=EAR,config=org/apache/geronimo/Server" class="org.apache.geronimo.j2ee.deployment.EARConfigBuilder"> + <gbean name="geronimo.deployer:role=Builder,type=EAR,config=org/apache/geronimo/RuntimeDeployer" class="org.apache.geronimo.j2ee.deployment.EARConfigBuilder"> <attribute name="defaultParentId">org/apache/geronimo/Server</attribute> <attribute name="j2eeServer" type="javax.management.ObjectName">geronimo.server:j2eeType=J2EEServer,name=geronimo</attribute> <attribute name="transactionContextManagerObjectName" type="javax.management.ObjectName">geronimo.server:type=TransactionContextManager</attribute> @@ -78,27 +78,57 @@ <attribute name="transactionalTimerObjectName" type="javax.management.ObjectName">geronimo.server:type=ThreadPooledTimer,name=TransactionalThreadPooledTimer</attribute> <attribute name="nonTransactionalTimerObjectName" type="javax.management.ObjectName">geronimo.server:type=ThreadPooledTimer,name=NonTransactionalThreadPooledTimer</attribute> <reference name="Repository">*:role=Repository,*</reference> - <reference name="EJBConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=EJB,config=org/apache/geronimo/Server</reference> - <reference name="EJBReferenceBuilder">geronimo.deployer:role=ModuleBuilder,type=EJB,config=org/apache/geronimo/Server</reference> - <reference name="WebConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=Web,config=org/apache/geronimo/Server</reference> - <reference name="ConnectorConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/Server</reference> - <reference name="ResourceReferenceBuilder">geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/Server</reference> - <reference name="AppClientConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=AppClient,config=org/apache/geronimo/Server</reference> + <reference name="EJBConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=EJB,config=org/apache/geronimo/RuntimeDeployer</reference> + <reference name="EJBReferenceBuilder">geronimo.deployer:role=ModuleBuilder,type=EJB,config=org/apache/geronimo/RuntimeDeployer</reference> + <reference name="WebConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=Web,config=org/apache/geronimo/RuntimeDeployer</reference> + <reference name="ConnectorConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/RuntimeDeployer</reference> + <reference name="ResourceReferenceBuilder">geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/RuntimeDeployer</reference> + <reference name="AppClientConfigBuilder">geronimo.deployer:role=ModuleBuilder,type=AppClient,config=org/apache/geronimo/RuntimeDeployer</reference> </gbean> - <gbean name="geronimo.deployer:role=ModuleBuilder,type=Web,config=org/apache/geronimo/Server" class="org.apache.geronimo.jetty.deployment.JettyModuleBuilder"> + <gbean name="geronimo.deployer:role=ModuleBuilder,type=Web,config=org/apache/geronimo/RuntimeDeployer" class="org.apache.geronimo.jetty.deployment.JettyModuleBuilder"> <attribute name="defaultParentId">org/apache/geronimo/Server</attribute> + <attribute name="defaultSessionTimeoutSeconds">1800</attribute> + <attribute name="defaultWelcomeFiles">index.html,index.htm,index.jsp</attribute> + <attribute name="jettyContainerObjectName">geronimo.server:type=WebContainer,container=Jetty</attribute> <reference name="SecurityService">geronimo.security:type=SecurityService</reference> + <attribute name="defaultServlets">geronimo.deployer:role=DefaultServlet,config=org/apache/geronimo/RuntimeDeployer,*</attribute> </gbean> - <gbean name="geronimo.deployer:role=ModuleBuilder,type=EJB,config=org/apache/geronimo/Server" class="org.openejb.deployment.OpenEJBModuleBuilder"> + <gbean name="geronimo.deployer:role=DefaultServlet,config=org/apache/geronimo/RuntimeDeployer,name=StaticContent" class="org.apache.geronimo.jetty.JettyServletHolder"> + <attribute name="servletName">default</attribute> + <attribute name="servletClass">org.mortbay.jetty.servlet.Default</attribute> + <attribute name="loadOnStartup">0</attribute> + <attribute name="initParams"> + acceptRanges=true + dirAllowed=true + putAllowed=false + delAllowed=false + redirectWelcome=false + minGzipLength=8192</attribute> + <attribute name="servletMappings">/</attribute> + </gbean> + + <gbean name="geronimo.deployer:role=DefaultServlet,config=org/apache/geronimo/RuntimeDeployer,name=JSPServlet" class="org.apache.geronimo.jetty.JettyServletHolder"> + <attribute name="servletName">jsp</attribute> + <attribute name="servletClass">org.apache.jasper.servlet.JspServlet</attribute> + <attribute name="loadOnStartup">0</attribute> + <attribute name="initParams"> + logVerbosityLevel=DEBUG + fork=false + xpoweredBy=false</attribute> + <attribute name="servletMappings">*.jsp,*.jspf,*.jspx,*.xsp</attribute> + </gbean> + + <gbean name="geronimo.deployer:role=ModuleBuilder,type=EJB,config=org/apache/geronimo/RuntimeDeployer" class="org.openejb.deployment.OpenEJBModuleBuilder"> <attribute name="defaultParentId">org/apache/geronimo/Server</attribute> + <reference name="SecurityService">geronimo.security:type=SecurityService</reference> <!-- <reference name="SkeletonGenerator">openejb.CORBA:type=SkeletonGenerator,vendor=OpenORB</reference>--> </gbean> - <gbean name="geronimo.deployer:role=ClientEJBReferenceBuilder,config=org/apache/geronimo/Server" class="org.openejb.deployment.RemoteEJBReferenceBuilder"/> + <gbean name="geronimo.deployer:role=ClientEJBReferenceBuilder,config=org/apache/geronimo/RuntimeDeployer" class="org.openejb.deployment.RemoteEJBReferenceBuilder"/> - <gbean name="geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/Server" class="org.apache.geronimo.connector.deployment.ConnectorModuleBuilder"> + <gbean name="geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/RuntimeDeployer" class="org.apache.geronimo.connector.deployment.ConnectorModuleBuilder"> <attribute name="defaultParentId">org/apache/geronimo/Server</attribute> <attribute name="defaultMaxSize" type="int">10</attribute> <attribute name="defaultMinSize" type="int">0</attribute> @@ -108,14 +138,14 @@ <attribute name="defaultXAThreadCaching" type="boolean">false</attribute> </gbean> - <gbean name="geronimo.deployer:role=ModuleBuilder,type=AppClient,config=org/apache/geronimo/Server" class="org.apache.geronimo.client.builder.AppClientModuleBuilder"> + <gbean name="geronimo.deployer:role=ModuleBuilder,type=AppClient,config=org/apache/geronimo/RuntimeDeployer" class="org.apache.geronimo.client.builder.AppClientModuleBuilder"> <attribute name="defaultClientParentId">org/apache/geronimo/Client</attribute> <attribute name="defaultServerParentId">org/apache/geronimo/Server</attribute> <attribute name="transactionContextManagerObjectName" type="javax.management.ObjectName">geronimo.client:type=TransactionContextManager</attribute> <attribute name="connectionTrackerObjectName" type="javax.management.ObjectName">geronimo.client:type=ConnectionTracker</attribute> - <reference name="EJBReferenceBuilder">geronimo.deployer:role=ClientEJBReferenceBuilder,config=org/apache/geronimo/Server</reference> - <reference name="ConnectorModuleBuilder">geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/Server</reference> - <reference name="ResourceReferenceBuilder">geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/Server</reference> + <reference name="EJBReferenceBuilder">geronimo.deployer:role=ClientEJBReferenceBuilder,config=org/apache/geronimo/RuntimeDeployer</reference> + <reference name="ConnectorModuleBuilder">geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/RuntimeDeployer</reference> + <reference name="ResourceReferenceBuilder">geronimo.deployer:role=ModuleBuilder,type=Connector,config=org/apache/geronimo/RuntimeDeployer</reference> <reference name="Store">*:role=ConfigurationStore,type=Local</reference> <reference name="Repository">*:role=Repository,*</reference> </gbean> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-secure-plan.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-secure-plan.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-secure-plan.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-secure-plan.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-secure-plan.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-secure-plan.xml Wed Dec 1 23:22:43 2004 @@ -30,10 +30,6 @@ parentId="org/apache/geronimo/Server" > - <dependency> - <uri>geronimo/jars/geronimo-jetty-${geronimo_version}.jar</uri> - </dependency> - <!-- Security GBeans --> <gbean name="geronimo.security:type=LoginModule,name=demo-properties-login" @@ -53,7 +49,7 @@ <attribute name="loginModuleConfiguration" type="java.util.Properties"> LoginModule.1.REQUIRED=geronimo.security:type=LoginModule,name=demo-properties-login </attribute> - <attribute name="autoMapPrincipalClasses" type="java.lang.String">org.apache.geronimo.security.realm.providers.PropertiesFileGroupPrincipal</attribute> + <attribute name="autoMapPrincipalClasses" type="java.lang.String">org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal</attribute> <reference name="ServerInfo">geronimo.system:role=ServerInfo</reference> </gbean> @@ -61,13 +57,6 @@ class="org.apache.geronimo.security.jaas.ServerRealmConfigurationEntry"> <attribute name="applicationConfigName" type="java.lang.String">jaasTest</attribute> <attribute name="realmName" type="java.lang.String">demo-properties-realm</attribute> - </gbean> - - <!-- Jetty Realm that points to the Geronimo Demo Properties File Realm --> - <gbean name="geronimo.jetty:role=JaasRealm" class="org.apache.geronimo.jetty.JAASJettyRealm"> - <reference name="JettyContainer">geronimo.server:type=WebContainer,container=Jetty</reference> - <attribute name="name" type="java.lang.String">Jetty JAAS Realm</attribute> - <attribute name="loginModuleName" type="java.lang.String">jaasTest</attribute> </gbean> </configuration> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-server-plan.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-server-plan.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-server-plan.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-server-plan.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-server-plan.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/assembly/src/plan/j2ee-server-plan.xml Wed Dec 1 23:22:43 2004 @@ -98,6 +98,22 @@ <uri>geronimo/jars/geronimo-client-${geronimo_version}.jar</uri> </dependency> + <!--jetty dependencies--> + <dependency> + <uri>jetty/jars/org.mortbay.jetty-${jetty_version}.jar</uri> + </dependency> + <dependency> + <uri>tomcat/jars/jasper-compiler-${jasper_version}.jar</uri> + </dependency> + <dependency> + <uri>tomcat/jars/jasper-runtime-${jasper_version}.jar</uri> + </dependency> + <dependency> + <uri>commons-el/jars/commons-el-${commons_el_version}.jar</uri> + </dependency> + <dependency> + <uri>ant/jars/ant-${ant_version}.jar</uri> + </dependency> <!-- Default security realm using properties files --> <gbean name="geronimo.security:type=LoginModule,name=properties-login" Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java Wed Dec 1 23:22:43 2004 @@ -444,4 +444,8 @@ DeploymentUtil.close(out); } } + + public GBeanData getConfigurationGBeanData() { + return new GBeanData(config); + } } Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/j2eeobjectnames/NameFactory.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/j2eeobjectnames/NameFactory.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/j2eeobjectnames/NameFactory.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/j2eeobjectnames/NameFactory.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/j2eeobjectnames/NameFactory.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/j2eeobjectnames/NameFactory.java Wed Dec 1 23:22:43 2004 @@ -73,6 +73,9 @@ public static final String JCA_RESOURCE_ADAPTER = "JCAResourceAdapter"; public static final String JCA_WORK_MANAGER = "JCAWorkManager"; public static final String JCA_CONNECTION_MANAGER = "JCAConnectionManager"; + public static final String WEB_FILTER = "WebFilter"; + public static final String WEB_FILTER_MAPPING = "WebFilterMapping"; + public static final String URL_PATTERN = "URLPattern"; public static ObjectName getDomainName(String j2eeDomainName, J2eeContext context) throws MalformedObjectNameException { Properties props = new Properties(); @@ -175,6 +178,22 @@ props.put(J2EE_APPLICATION, context.getJ2eeApplicationName(j2eeApplicationName)); props.put(WEB_MODULE, context.getJ2eeModuleName(j2eeModuleName)); props.put(J2EE_NAME, context.getJ2eeName(j2eeName)); + return ObjectName.getInstance(context.getJ2eeDomainName(j2eeDomainName), props); + } + + //THIS IS KIND OF WEIRD. Is there a better way??? + public static ObjectName getWebFilterMappingName(String j2eeDomainName, String j2eeServerName, String j2eeApplicationName, String j2eeModuleName, String filterName, String servletName, String urlPattern, J2eeContext context) throws MalformedObjectNameException { + Properties props = new Properties(); + props.put(J2EE_TYPE, WEB_FILTER_MAPPING); + props.put(J2EE_SERVER, context.getJ2eeServerName(j2eeServerName)); + props.put(J2EE_APPLICATION, context.getJ2eeApplicationName(j2eeApplicationName)); + props.put(WEB_MODULE, context.getJ2eeModuleName(j2eeModuleName)); + props.put(WEB_FILTER, filterName); + if (servletName != null) { + props.put(SERVLET, servletName); + } else { + props.put(URL_PATTERN, ObjectName.quote(urlPattern)); + } return ObjectName.getInstance(context.getJ2eeDomainName(j2eeDomainName), props); } Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java Wed Dec 1 23:22:43 2004 @@ -17,9 +17,6 @@ package org.apache.geronimo.jetty.deployment; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.transaction.UserTransaction; import java.io.File; import java.io.FileFilter; import java.io.IOException; @@ -27,22 +24,31 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; import java.util.Enumeration; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedList; +import java.util.List; +import java.util.Map; import java.util.Set; import java.util.jar.JarFile; import java.util.zip.ZipEntry; - -import org.apache.xmlbeans.XmlException; -import org.apache.xmlbeans.XmlObject; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.security.jacc.WebResourcePermission; +import javax.security.jacc.WebRoleRefPermission; +import javax.security.jacc.WebUserDataPermission; +import javax.transaction.UserTransaction; import org.apache.geronimo.deployment.DeploymentException; import org.apache.geronimo.deployment.service.GBeanHelper; import org.apache.geronimo.deployment.util.DeploymentUtil; +import org.apache.geronimo.gbean.GBeanData; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; -import org.apache.geronimo.gbean.jmx.GBeanMBean; import org.apache.geronimo.j2ee.deployment.EARContext; import org.apache.geronimo.j2ee.deployment.Module; import org.apache.geronimo.j2ee.deployment.ModuleBuilder; @@ -51,28 +57,56 @@ import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.apache.geronimo.jetty.JettyClassLoader; +import org.apache.geronimo.jetty.JettyFilterHolder; +import org.apache.geronimo.jetty.JettyFilterMapping; +import org.apache.geronimo.jetty.JettyServletHolder; import org.apache.geronimo.jetty.JettyWebAppContext; import org.apache.geronimo.jetty.JettyWebAppJACCContext; +import org.apache.geronimo.kernel.Kernel; import org.apache.geronimo.naming.deployment.ENCConfigBuilder; import org.apache.geronimo.naming.deployment.GBeanResourceEnvironmentBuilder; import org.apache.geronimo.naming.java.ReadOnlyContext; import org.apache.geronimo.schema.SchemaConversionUtils; +import org.apache.geronimo.security.SecurityService; import org.apache.geronimo.security.deploy.Security; import org.apache.geronimo.security.deployment.SecurityBuilder; -import org.apache.geronimo.security.SecurityService; +import org.apache.geronimo.security.util.URLPattern; import org.apache.geronimo.transaction.OnlineUserTransaction; import org.apache.geronimo.xbeans.geronimo.jetty.JettyDependencyType; import org.apache.geronimo.xbeans.geronimo.jetty.JettyGbeanType; import org.apache.geronimo.xbeans.geronimo.jetty.JettyWebAppDocument; import org.apache.geronimo.xbeans.geronimo.jetty.JettyWebAppType; +import org.apache.geronimo.xbeans.j2ee.DispatcherType; +import org.apache.geronimo.xbeans.j2ee.ErrorPageType; import org.apache.geronimo.xbeans.j2ee.FilterMappingType; +import org.apache.geronimo.xbeans.j2ee.FilterType; +import org.apache.geronimo.xbeans.j2ee.FormLoginConfigType; +import org.apache.geronimo.xbeans.j2ee.HttpMethodType; +import org.apache.geronimo.xbeans.j2ee.JspConfigType; +import org.apache.geronimo.xbeans.j2ee.ListenerType; +import org.apache.geronimo.xbeans.j2ee.LocaleEncodingMappingListType; +import org.apache.geronimo.xbeans.j2ee.LocaleEncodingMappingType; +import org.apache.geronimo.xbeans.j2ee.LoginConfigType; +import org.apache.geronimo.xbeans.j2ee.MimeMappingType; +import org.apache.geronimo.xbeans.j2ee.ParamValueType; +import org.apache.geronimo.xbeans.j2ee.RoleNameType; import org.apache.geronimo.xbeans.j2ee.SecurityConstraintType; +import org.apache.geronimo.xbeans.j2ee.SecurityRoleRefType; import org.apache.geronimo.xbeans.j2ee.SecurityRoleType; import org.apache.geronimo.xbeans.j2ee.ServletMappingType; +import org.apache.geronimo.xbeans.j2ee.ServletType; +import org.apache.geronimo.xbeans.j2ee.TaglibType; import org.apache.geronimo.xbeans.j2ee.UrlPatternType; import org.apache.geronimo.xbeans.j2ee.WebAppDocument; import org.apache.geronimo.xbeans.j2ee.WebAppType; import org.apache.geronimo.xbeans.j2ee.WebResourceCollectionType; +import org.apache.geronimo.xbeans.j2ee.WelcomeFileListType; +import org.apache.xmlbeans.XmlException; +import org.apache.xmlbeans.XmlObject; +import org.mortbay.http.BasicAuthenticator; +import org.mortbay.http.ClientCertAuthenticator; +import org.mortbay.http.DigestAuthenticator; +import org.mortbay.jetty.servlet.FormAuthenticator; /** @@ -80,11 +114,33 @@ */ public class JettyModuleBuilder implements ModuleBuilder { private final URI defaultParentId; + private final ObjectName jettyContainerObjectName; + private final ObjectName defaultServlets; private final SecurityService securityService; - public JettyModuleBuilder(URI defaultParentId, SecurityService securityService) { + private final List defaultWelcomeFiles; + private final Integer defaultSessionTimeoutSeconds; + + private final Kernel kernel; + + public JettyModuleBuilder(URI defaultParentId, + Integer defaultSessionTimeoutSeconds, + List defaultWelcomeFiles, + ObjectName jettyContainerObjectName, + ObjectName defaultServlets, + SecurityService securityService, + Kernel kernel) { this.defaultParentId = defaultParentId; + this.defaultSessionTimeoutSeconds = (defaultSessionTimeoutSeconds == null) ? new Integer(30 * 60) : defaultSessionTimeoutSeconds; + this.jettyContainerObjectName = jettyContainerObjectName; this.securityService = securityService; + this.defaultServlets = defaultServlets; + this.kernel = kernel; + + //todo locale mappings + //todo jsr154 filter + + this.defaultWelcomeFiles = defaultWelcomeFiles; } public Module createModule(File plan, JarFile moduleFile) throws DeploymentException { @@ -192,7 +248,7 @@ jettyWebApp = createDefaultPlan(path, webApp); } } catch (XmlException e) { - throw new DeploymentException(e); + throw new DeploymentException("xml problem", e); } return jettyWebApp; } @@ -303,19 +359,15 @@ UserTransaction userTransaction = new OnlineUserTransaction(); ReadOnlyContext compContext = buildComponentContext(earContext, webModule, webApp, jettyWebApp, userTransaction, webClassLoader); - /** - * Build the security configuration. Attempt to auto generate role mappings. - */ - Security security = SecurityBuilder.buildSecurityConfig(jettyWebApp.getSecurity(), collectRoleNames(webApp)); - if (security != null) security.autoGenerate(securityService); - - GBeanMBean gbean; + GBeanData webModuleData; try { - if (security == null) { - gbean = new GBeanMBean(JettyWebAppContext.GBEAN_INFO, webClassLoader); - } else { - gbean = new GBeanMBean(JettyWebAppJACCContext.GBEAN_INFO, webClassLoader); - gbean.setAttribute("securityConfig", security); + Set securityRoles = new HashSet(); + if (jettyWebApp.isSetLoginDomainName()) { + webModuleData = new GBeanData(webModuleName, JettyWebAppJACCContext.GBEAN_INFO); + Security security = SecurityBuilder.buildSecurityConfig(jettyWebApp.getSecurity(), collectRoleNames(webApp)); + security.autoGenerate(securityService); + webModuleData.setAttribute("loginDomainName", jettyWebApp.getLoginDomainName().trim()); + webModuleData.setAttribute("securityConfig", security); String policyContextID; if (earContext.getApplicationObjectName() == null) { @@ -323,35 +375,481 @@ } else { policyContextID = earContext.getApplicationObjectName().toString(); } - gbean.setAttribute("policyContextID", policyContextID); + webModuleData.setAttribute("policyContextID", policyContextID); + buildSpecSecurityConfig(webApp, webModuleData, securityRoles); + + } else { + webModuleData = new GBeanData(webModuleName, JettyWebAppContext.GBEAN_INFO); } - gbean.setAttribute("uri", URI.create(module.getTargetPath() + "/")); - gbean.setAttribute("componentContext", compContext); - gbean.setAttribute("userTransaction", userTransaction); - gbean.setAttribute("webClassPath", webClassPath); + webModuleData.setAttribute("uri", URI.create(module.getTargetPath() + "/")); + webModuleData.setAttribute("componentContext", compContext); + webModuleData.setAttribute("userTransaction", userTransaction); + webModuleData.setAttribute("webClassPath", webClassPath); // unsharableResources, applicationManagedSecurityResources - GBeanResourceEnvironmentBuilder rebuilder = new GBeanResourceEnvironmentBuilder(gbean); + GBeanResourceEnvironmentBuilder rebuilder = new GBeanResourceEnvironmentBuilder(webModuleData); ENCConfigBuilder.setResourceEnvironment(earContext, webModule.getModuleURI(), rebuilder, webApp.getResourceRefArray(), jettyWebApp.getResourceRefArray()); - gbean.setAttribute("contextPath", webModule.getContextRoot()); - gbean.setAttribute("contextPriorityClassLoader", Boolean.valueOf(contextPriorityClassLoader)); + webModuleData.setAttribute("contextPath", webModule.getContextRoot()); + webModuleData.setAttribute("contextPriorityClassLoader", Boolean.valueOf(contextPriorityClassLoader)); + + webModuleData.setReferencePattern("TransactionContextManager", earContext.getTransactionContextManagerObjectName()); + webModuleData.setReferencePattern("TrackedConnectionAssociator", earContext.getConnectionTrackerObjectName()); + webModuleData.setReferencePattern("JettyContainer", jettyContainerObjectName); + //stuff that jetty used to do + if (webApp.getDisplayNameArray().length > 0) { + webModuleData.setAttribute("displayName", webApp.getDisplayNameArray()[0].getStringValue()); + } + + ParamValueType[] contextParamArray = webApp.getContextParamArray(); + Map contextParams = new HashMap(); + for (int i = 0; i < contextParamArray.length; i++) { + ParamValueType contextParam = contextParamArray[i]; + contextParams.put(contextParam.getParamName().getStringValue().trim(), contextParam.getParamValue().getStringValue().trim()); + } + webModuleData.setAttribute("contextParamMap", contextParams); + + ListenerType[] listenerArray = webApp.getListenerArray(); + Collection listeners = new ArrayList(); + for (int i = 0; i < listenerArray.length; i++) { + ListenerType listenerType = listenerArray[i]; + listeners.add(listenerType.getListenerClass().getStringValue()); + } + webModuleData.setAttribute("listenerClassNames", listeners); + + webModuleData.setAttribute("distributable", webApp.getDistributableArray().length == 1 ? Boolean.TRUE : Boolean.FALSE); + + webModuleData.setAttribute("sessionTimeoutSeconds", webApp.getSessionConfigArray().length == 1 ? new Integer(webApp.getSessionConfigArray(0).getSessionTimeout().getBigIntegerValue().intValue() * 60) : defaultSessionTimeoutSeconds); + + MimeMappingType[] mimeMappingArray = webApp.getMimeMappingArray(); + Map mimeMappingMap = new HashMap(); + for (int i = 0; i < mimeMappingArray.length; i++) { + MimeMappingType mimeMappingType = mimeMappingArray[i]; + mimeMappingMap.put(mimeMappingType.getExtension().getStringValue(), mimeMappingType.getMimeType().getStringValue()); + } + webModuleData.setAttribute("mimeMap", mimeMappingMap); + + WelcomeFileListType[] welcomeFileArray = webApp.getWelcomeFileListArray(); + //not clear if the default welcome files should get added if explicit ones supplied... + List welcomeFiles = new ArrayList(defaultWelcomeFiles); + for (int i = 0; i < welcomeFileArray.length; i++) { + String[] welcomeFileListType = welcomeFileArray[i].getWelcomeFileArray(); + for (int j = 0; j < welcomeFileListType.length; j++) { + String welcomeFile = welcomeFileListType[j]; + welcomeFiles.add(welcomeFile); + } + } + webModuleData.setAttribute("welcomeFiles", (String[]) welcomeFiles.toArray(new String[welcomeFiles.size()])); + + LocaleEncodingMappingListType[] localeEncodingMappingListArray = webApp.getLocaleEncodingMappingListArray(); + Map localeEncodingMappingMap = new HashMap(); + for (int i = 0; i < localeEncodingMappingListArray.length; i++) { + LocaleEncodingMappingType[] localeEncodingMappingArray = localeEncodingMappingListArray[i].getLocaleEncodingMappingArray(); + for (int j = 0; j < localeEncodingMappingArray.length; j++) { + LocaleEncodingMappingType localeEncodingMapping = localeEncodingMappingArray[j]; + localeEncodingMappingMap.put(localeEncodingMapping.getLocale(), localeEncodingMapping.getEncoding()); + } + } + webModuleData.setAttribute("localeEncodingMapping", localeEncodingMappingMap); + + ErrorPageType[] errorPageArray = webApp.getErrorPageArray(); + Map errorPageMap = new HashMap(); + for (int i = 0; i < errorPageArray.length; i++) { + ErrorPageType errorPageType = errorPageArray[i]; + if (errorPageType.isSetErrorCode()) { + errorPageMap.put(errorPageType.getErrorCode().getStringValue(), errorPageType.getLocation().getStringValue()); + } else { + errorPageMap.put(errorPageType.getExceptionType().getStringValue(), errorPageType.getLocation().getStringValue()); + } + } + webModuleData.setAttribute("errorPages", errorPageMap); + + JspConfigType[] jspConfigArray = webApp.getJspConfigArray(); + if (jspConfigArray.length > 1) { + throw new DeploymentException("At most one jsp-config element, not " + jspConfigArray.length); + } + Map tagLibMap = new HashMap(); + for (int i = 0; i < jspConfigArray.length; i++) { + TaglibType[] tagLibArray = jspConfigArray[i].getTaglibArray(); + for (int j = 0; j < tagLibArray.length; j++) { + TaglibType taglib = tagLibArray[j]; + tagLibMap.put(taglib.getTaglibUri(), taglib.getTaglibLocation().getStringValue()); + } + } + webModuleData.setAttribute("tagLibMap", tagLibMap); + + LoginConfigType[] loginConfigArray = webApp.getLoginConfigArray(); + if (loginConfigArray.length > 1) { + throw new DeploymentException("At most one login-config element, not " + loginConfigArray.length); + } + if (loginConfigArray.length == 1) { + LoginConfigType loginConfig = loginConfigArray[0]; + if (loginConfig.isSetAuthMethod()) { + String authMethod = loginConfig.getAuthMethod().getStringValue(); + if ("BASIC".equals(authMethod)) { + webModuleData.setAttribute("authenticator", new BasicAuthenticator()); + } else if ("DIGEST".equals(authMethod)) { + webModuleData.setAttribute("authenticator", new DigestAuthenticator()); + } else if ("FORM".equals(authMethod)) { + + FormAuthenticator formAuthenticator = new FormAuthenticator(); + webModuleData.setAttribute("authenticator", formAuthenticator); + if (loginConfig.isSetFormLoginConfig()) { + FormLoginConfigType formLoginConfig = loginConfig.getFormLoginConfig(); + formAuthenticator.setLoginPage(formLoginConfig.getFormLoginPage().getStringValue()); + formAuthenticator.setErrorPage(formLoginConfig.getFormErrorPage().getStringValue()); + } + } else if ("CLIENT-CERT".equals(authMethod)) { + webModuleData.setAttribute("authenticator", new ClientCertAuthenticator()); + } + } + if (loginConfig.isSetRealmName()) { + webModuleData.setAttribute("realmName", loginConfig.getRealmName().getStringValue()); + } + + } + earContext.addGBean(webModuleData); + + ServletMappingType[] servletMappingArray = webApp.getServletMappingArray(); + Map servletMappings = new HashMap(); + for (int i = 0; i < servletMappingArray.length; i++) { + ServletMappingType servletMappingType = servletMappingArray[i]; + String servletName = servletMappingType.getServletName().getStringValue().trim(); + String urlPattern = servletMappingType.getUrlPattern().getStringValue(); + checkString(urlPattern); + Set urlsForServlet = (Set) servletMappings.get(servletName); + if (urlsForServlet == null) { + urlsForServlet = new HashSet(); + servletMappings.put(servletName, urlsForServlet); + } + urlsForServlet.add(urlPattern); + } + + FilterMappingType[] filterMappingArray = webApp.getFilterMappingArray(); + ObjectName previous = null; + for (int i = 0; i < filterMappingArray.length; i++) { + FilterMappingType filterMappingType = filterMappingArray[i]; + String filterName = filterMappingType.getFilterName().getStringValue().trim(); + GBeanData filterMappingData = new GBeanData(JettyFilterMapping.GBEAN_INFO); + filterMappingData.setReferencePattern("Previous", previous); + filterMappingData.setReferencePattern("JettyServletRegistration", webModuleName); + + ObjectName filterMappingName = null; + if (filterMappingType.isSetUrlPattern()) { + //do not trim! + String urlPattern = filterMappingType.getUrlPattern().getStringValue(); + filterMappingData.setAttribute("urlPattern", urlPattern); + filterMappingName = NameFactory.getWebFilterMappingName(null, null, null, null, filterName, null, urlPattern, moduleJ2eeContext); + } + if (filterMappingType.isSetServletName()) { + String servletName = filterMappingType.getServletName().getStringValue().trim(); + ObjectName servletObjectName = NameFactory.getWebComponentName(null, null, null, null, servletName, NameFactory.SERVLET, moduleJ2eeContext); + filterMappingData.setReferencePattern("Servlet", servletObjectName); + filterMappingName = NameFactory.getWebFilterMappingName(null, null, null, null, filterName, servletName, null, moduleJ2eeContext); + } + filterMappingData.setName(filterMappingName); + previous = filterMappingName; + + boolean request = filterMappingType.getDispatcherArray().length == 0; + boolean forward = false; + boolean include = false; + boolean error = false; + for (int j = 0; j < filterMappingType.getDispatcherArray().length; j++) { + DispatcherType dispatcherType = filterMappingType.getDispatcherArray()[j]; + if (dispatcherType.getStringValue().equals("REQUEST")) { + request = true; + } else if (dispatcherType.getStringValue().equals("FORWARD")) { + forward = true; + } else if (dispatcherType.getStringValue().equals("INCLUDE")) { + include = true; + } else if (dispatcherType.getStringValue().equals("ERROR")) { + error = true; + } + } + filterMappingData.setAttribute("requestDispatch", Boolean.valueOf(request)); + filterMappingData.setAttribute("forwardDispatch", Boolean.valueOf(forward)); + filterMappingData.setAttribute("includeDispatch", Boolean.valueOf(include)); + filterMappingData.setAttribute("errorDispatch", Boolean.valueOf(error)); + ObjectName filterObjectName = NameFactory.getWebComponentName(null, null, null, null, filterName, NameFactory.WEB_FILTER, moduleJ2eeContext); + filterMappingData.setReferencePattern("Filter", filterObjectName); + earContext.addGBean(filterMappingData); + } + + FilterType[] filterArray = webApp.getFilterArray(); + for (int i = 0; i < filterArray.length; i++) { + FilterType filterType = filterArray[i]; + String filterName = filterType.getFilterName().getStringValue().trim(); + ObjectName filterObjectName = NameFactory.getWebComponentName(null, null, null, null, filterName, NameFactory.WEB_FILTER, moduleJ2eeContext); + GBeanData filterData = new GBeanData(filterObjectName, JettyFilterHolder.GBEAN_INFO); + filterData.setAttribute("filterName", filterName); + filterData.setAttribute("filterClass", filterType.getFilterClass().getStringValue().trim()); + Map initParams = new HashMap(); + ParamValueType[] initParamArray = filterType.getInitParamArray(); + for (int j = 0; j < initParamArray.length; j++) { + ParamValueType paramValueType = initParamArray[j]; + initParams.put(paramValueType.getParamName().getStringValue().trim(), paramValueType.getParamValue().getStringValue().trim()); + } + filterData.setAttribute("initParams", initParams); + filterData.setReferencePattern("JettyServletRegistration", webModuleName); + earContext.addGBean(filterData); + } + + //add default servlets + Set defaultServletNames = kernel.listGBeans(defaultServlets); + for (Iterator iterator = defaultServletNames.iterator(); iterator.hasNext();) { + + GBeanData servletGBeanData = kernel.getGBeanData((ObjectName) iterator.next()); + ObjectName defaultServletObjectName = NameFactory.getWebComponentName(null, null, null, null, (String) servletGBeanData.getAttribute("servletName"), NameFactory.SERVLET, moduleJ2eeContext); + servletGBeanData.setName(defaultServletObjectName); + servletGBeanData.setReferencePattern("JettyServletRegistration", webModuleName); + earContext.addGBean(servletGBeanData); + } + + //set up servlet gbeans. + ServletType[] servletTypes = webApp.getServletArray(); + for (int i = 0; i < servletTypes.length; i++) { + ServletType servletType = servletTypes[i]; + String servletName = servletType.getServletName().getStringValue().trim(); + ObjectName servletObjectName = NameFactory.getWebComponentName(null, null, null, null, servletName, NameFactory.SERVLET, moduleJ2eeContext); + GBeanData servletData = new GBeanData(servletObjectName, JettyServletHolder.GBEAN_INFO); + servletData.setReferencePattern("JettyServletRegistration", webModuleName); + servletData.setAttribute("servletName", servletName); + if (servletType.isSetServletClass()) { + servletData.setAttribute("servletClass", servletType.getServletClass().getStringValue().trim()); + } + if (servletType.isSetJspFile()) { + servletData.setAttribute("jspFile", servletType.getJspFile().getStringValue().trim()); + //TODO MAKE THIS CONFIGURABLE!!! Jetty uses the servlet mapping set up from the default-web.xml + servletData.setAttribute("servletClass", "org.apache.jasper.servlet.JspServlet"); + } + //TODO in init param setter, add classpath if jspFile is not null. + Map initParams = new HashMap(); + ParamValueType[] initParamArray = servletType.getInitParamArray(); + for (int j = 0; j < initParamArray.length; j++) { + ParamValueType paramValueType = initParamArray[j]; + initParams.put(paramValueType.getParamName().getStringValue().trim(), paramValueType.getParamValue().getStringValue().trim()); + } + servletData.setAttribute("initParams", initParams); + if (servletType.isSetLoadOnStartup()) { + Integer loadOnStartup = new Integer(servletType.getLoadOnStartup().getBigIntegerValue().intValue()); + servletData.setAttribute("loadOnStartup", loadOnStartup); + } + servletData.setAttribute("servletMappings", servletMappings.get(servletName)); + + //WebRoleRefPermissions + SecurityRoleRefType[] securityRoleRefTypeArray = servletType.getSecurityRoleRefArray(); + Map webRoleRefPermissions = new HashMap(); + Set unmappedRoles = new HashSet(securityRoles); + for (int j = 0; j < securityRoleRefTypeArray.length; j++) { + SecurityRoleRefType securityRoleRefType = securityRoleRefTypeArray[j]; + String roleName = securityRoleRefType.getRoleName().getStringValue().trim(); + String roleLink = securityRoleRefType.getRoleLink().getStringValue().trim(); + webRoleRefPermissions.put(roleName, new WebRoleRefPermission(servletName, roleLink)); + unmappedRoles.remove(roleName); + } + for (Iterator iterator = unmappedRoles.iterator(); iterator.hasNext();) { + String roleName = (String) iterator.next(); + webRoleRefPermissions.put(roleName, new WebRoleRefPermission(servletName, roleName)); + } + servletData.setAttribute("webRoleRefPermissions", webRoleRefPermissions); - gbean.setReferencePattern("TransactionContextManager", earContext.getTransactionContextManagerObjectName()); - gbean.setReferencePattern("TrackedConnectionAssociator", earContext.getConnectionTrackerObjectName()); - gbean.setReferencePattern("JettyContainer", new ObjectName("*:type=WebContainer,container=Jetty")); // @todo configurable + earContext.addGBean(servletData); + } + } catch (DeploymentException de) { + throw de; } catch (Exception e) { throw new DeploymentException("Unable to initialize webapp GBean", e); } - earContext.addGBean(webModuleName, gbean); return null; } + private void buildSpecSecurityConfig(WebAppType webApp, GBeanData webModuleData, Set securityRoles) { + Map uncheckedPatterns = new HashMap(); + Map excludedPatterns = new HashMap(); + Map rolesPatterns = new HashMap(); + Set allSet = new HashSet(); // == allMap.values() + Map allMap = new HashMap(); //uncheckedPatterns union excludedPatterns union rolesPatterns. + + SecurityRoleType[] securityRoleArray = webApp.getSecurityRoleArray(); + for (int i = 0; i < securityRoleArray.length; i++) { + SecurityRoleType securityRoleType = securityRoleArray[i]; + securityRoles.add(securityRoleType.getRoleName().getStringValue().trim()); + } + webModuleData.setAttribute("securityRoles", securityRoles); + + SecurityConstraintType[] securityConstraintArray = webApp.getSecurityConstraintArray(); + for (int i = 0; i < securityConstraintArray.length; i++) { + SecurityConstraintType securityConstraintType = securityConstraintArray[i]; + Map currentPatterns; + if (securityConstraintType.isSetAuthConstraint()) { + if (securityConstraintType.getAuthConstraint().getRoleNameArray().length == 0) { + currentPatterns = excludedPatterns; + } else { + currentPatterns = rolesPatterns; + } + } else { + currentPatterns = uncheckedPatterns; + } + + String transport = ""; + if (securityConstraintType.isSetUserDataConstraint()) { + transport = securityConstraintType.getUserDataConstraint().getTransportGuarantee().getStringValue().trim().toUpperCase(); + } + + WebResourceCollectionType[] webResourceCollectionTypeArray = securityConstraintType.getWebResourceCollectionArray(); + for (int j = 0; j < webResourceCollectionTypeArray.length; j++) { + WebResourceCollectionType webResourceCollectionType = webResourceCollectionTypeArray[j]; + UrlPatternType[] urlPatternTypeArray = webResourceCollectionType.getUrlPatternArray(); + for (int k = 0; k < urlPatternTypeArray.length; k++) { + UrlPatternType urlPatternType = urlPatternTypeArray[k]; + //presumably, don't trim + String url = urlPatternType.getStringValue(); + URLPattern pattern = (URLPattern) currentPatterns.get(url); + if (pattern == null) { + pattern = new URLPattern(url); + currentPatterns.put(url, pattern); + } + + URLPattern allPattern = (URLPattern) allMap.get(url); + if (allPattern == null) { + allPattern = new URLPattern(url); + allSet.add(allPattern); + allMap.put(url, allPattern); + } + + HttpMethodType[] httpMethodTypeArray = webResourceCollectionType.getHttpMethodArray(); + if (httpMethodTypeArray.length == 0) { + pattern.addMethod(""); + allPattern.addMethod(""); + } else { + for (int l = 0; l < httpMethodTypeArray.length; l++) { + HttpMethodType httpMethodType = httpMethodTypeArray[l]; + //TODO is trim OK? + String method = httpMethodType.getStringValue().trim(); + pattern.addMethod(method); + allPattern.addMethod(method); + } + } + if (currentPatterns == rolesPatterns) { + RoleNameType[] roleNameTypeArray = securityConstraintType.getAuthConstraint().getRoleNameArray(); + for (int l = 0; l < roleNameTypeArray.length; l++) { + RoleNameType roleNameType = roleNameTypeArray[l]; + String role = roleNameType.getStringValue().trim(); + if (role.equals("*")) { + pattern.addAllRoles(securityRoles); + } else { + pattern.addRole(role); + } + } + } + + pattern.setTransport(transport); + } + } + } + + Set excludedPermissions = new HashSet(); + Set uncheckedPermissions = new HashSet(); + Map rolePermissions = new HashMap(); + + Iterator iter = excludedPatterns.keySet().iterator(); + while (iter.hasNext()) { + URLPattern pattern = (URLPattern) excludedPatterns.get(iter.next()); + String name = pattern.getQualifiedPattern(allSet); + String actions = pattern.getMethods(); + + excludedPermissions.add(new WebResourcePermission(name, actions)); + excludedPermissions.add(new WebUserDataPermission(name, actions)); + } + + iter = rolesPatterns.keySet().iterator(); + while (iter.hasNext()) { + URLPattern pattern = (URLPattern) rolesPatterns.get(iter.next()); + String name = pattern.getQualifiedPattern(allSet); + String actions = pattern.getMethods(); + WebResourcePermission permission = new WebResourcePermission(name, actions); + + Iterator names = pattern.getRoles().iterator(); + while (names.hasNext()) { + String roleName = (String) names.next(); + Set permissionsForRole = (Set) rolePermissions.get(roleName); + if (permissionsForRole == null) { + permissionsForRole = new HashSet(); + rolePermissions.put(roleName, permissionsForRole); + } + permissionsForRole.add(permission); + } + } + + iter = uncheckedPatterns.keySet().iterator(); + while (iter.hasNext()) { + URLPattern pattern = (URLPattern) uncheckedPatterns.get(iter.next()); + String name = pattern.getQualifiedPattern(allSet); + String actions = pattern.getMethods(); + + uncheckedPermissions.add(new WebResourcePermission(name, actions)); + } + + iter = rolesPatterns.keySet().iterator(); + while (iter.hasNext()) { + URLPattern pattern = (URLPattern) rolesPatterns.get(iter.next()); + String name = pattern.getQualifiedPattern(allSet); + String actions = pattern.getMethodsWithTransport(); + + uncheckedPermissions.add(new WebUserDataPermission(name, actions)); + } + + iter = uncheckedPatterns.keySet().iterator(); + while (iter.hasNext()) { + URLPattern pattern = (URLPattern) uncheckedPatterns.get(iter.next()); + String name = pattern.getQualifiedPattern(allSet); + String actions = pattern.getMethodsWithTransport(); + + uncheckedPermissions.add(new WebUserDataPermission(name, actions)); + } + + /** + * A <code>WebResourcePermission</code> and a <code>WebUserDataPermission</code> must be instantiated for + * each <tt>url-pattern</tt> in the deployment descriptor and the default pattern "/", that is not combined + * by the <tt>web-resource-collection</tt> elements of the deployment descriptor with ever HTTP method + * value. The permission objects must be contructed using the qualified pattern as their name and with + * actions defined by the subset of the HTTP methods that do not occur in combination with the pattern. + * The resulting permissions that must be added to the unchecked policy statements by calling the + * <code>addToUncheckedPolcy</code> method on the <code>PolicyConfiguration</code> object. + */ + iter = allSet.iterator(); + while (iter.hasNext()) { + URLPattern pattern = (URLPattern) iter.next(); + String name = pattern.getQualifiedPattern(allSet); + String actions = pattern.getComplementedMethods(); + + if (actions.length() == 0) { + continue; + } + + uncheckedPermissions.add(new WebResourcePermission(name, actions)); + uncheckedPermissions.add(new WebUserDataPermission(name, actions)); + } + + URLPattern pattern = new URLPattern("/"); + if (!allSet.contains(pattern)) { + String name = pattern.getQualifiedPattern(allSet); + String actions = pattern.getComplementedMethods(); + + uncheckedPermissions.add(new WebResourcePermission(name, actions)); + uncheckedPermissions.add(new WebUserDataPermission(name, actions)); + } + + webModuleData.setAttribute("excludedPermissions", excludedPermissions); + webModuleData.setAttribute("uncheckedPermissions", uncheckedPermissions); + webModuleData.setAttribute("rolePermissions", rolePermissions); + } + private static Set collectRoleNames(WebAppType webApp) { Set roleNames = new HashSet(); SecurityRoleType[] securityRoles = webApp.getSecurityRoleArray(); - for (int i=0; i<securityRoles.length; i++) { + for (int i = 0; i < securityRoles.length; i++) { roleNames.add(securityRoles[i].getRoleName().getStringValue()); } @@ -471,10 +969,22 @@ static { GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(JettyModuleBuilder.class); infoBuilder.addAttribute("defaultParentId", URI.class, true); + infoBuilder.addAttribute("defaultSessionTimeoutSeconds", Integer.class, true); + infoBuilder.addAttribute("defaultWelcomeFiles", List.class, true); + infoBuilder.addAttribute("jettyContainerObjectName", ObjectName.class, true); + infoBuilder.addAttribute("defaultServlets", ObjectName.class, true); infoBuilder.addReference("SecurityService", SecurityService.class); + infoBuilder.addAttribute("kernel", Kernel.class, false); infoBuilder.addInterface(ModuleBuilder.class); - infoBuilder.setConstructor(new String[] {"defaultParentId", "SecurityService"}); + infoBuilder.setConstructor(new String[]{ + "defaultParentId", + "defaultSessionTimeoutSeconds", + "defaultWelcomeFiles", + "jettyContainerObjectName", + "defaultServlets", + "SecurityService", + "kernel"}); GBEAN_INFO = infoBuilder.getBeanInfo(); } Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/schema/geronimo-jetty.xsd Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/schema/geronimo-jetty.xsd?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/schema/geronimo-jetty.xsd&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/schema/geronimo-jetty.xsd&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/schema/geronimo-jetty.xsd (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/schema/geronimo-jetty.xsd Wed Dec 1 23:22:43 2004 @@ -37,14 +37,14 @@ <xs:sequence> <xs:element name="dependency" type="jetty:dependencyType" minOccurs="0" maxOccurs="unbounded"/> - <xs:element name="context-root" type="xs:string" minOccurs="0" maxOccurs="1"/> + <xs:element name="context-root" type="xs:string" minOccurs="0"/> <xs:element name="context-priority-classloader" type="xs:boolean"/> + <xs:sequence minOccurs="0"> + <xs:element name="login-domain-name" type="xs:string"/> + <xs:element ref="security:security"/> + </xs:sequence> - <xs:element ref="security:security" minOccurs="0"/> - - <xs:element name="gbean" type="jetty:gbeanType" minOccurs="0" maxOccurs="unbounded"/> - <!--xs:group ref="naming:jndiEnvironmentRefsGroup"/--> <xs:element ref="naming:ejb-ref" minOccurs="0" maxOccurs="unbounded"/> @@ -54,8 +54,11 @@ <xs:element ref="naming:resource-ref" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="naming:resource-env-ref" minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="gbean" type="jetty:gbeanType" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> <xs:attribute name="configId" type="xs:string" use="required"/> <xs:attribute name="parentId" type="xs:string" use="optional"/> </xs:complexType> + </xs:schema> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war3/WEB-INF/geronimo-web.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war3/WEB-INF/geronimo-web.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war3/WEB-INF/geronimo-web.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war3/WEB-INF/geronimo-web.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war3/WEB-INF/geronimo-web.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war3/WEB-INF/geronimo-web.xml Wed Dec 1 23:22:43 2004 @@ -23,6 +23,7 @@ <context-root>/test</context-root> <context-priority-classloader>false</context-priority-classloader> + <login-domain-name>demo-properties-realm</login-domain-name> <sec:security> <sec:auto-map-roles security-realm="demo-properties-realm"/> <sec:default-principal realm-name="demo-properties-realm"> Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war4/WEB-INF/web.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war4/WEB-INF/web.xml?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/deployables/war4/WEB-INF/web.xml Wed Dec 1 23:22:43 2004 @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> + <display-name>war4</display-name> + <filter> + <filter-name>Filter1</filter-name> + <filter-class>org.apache.geronimo.jetty.app.Filter1</filter-class> + <init-param> + <param-name>attribute1</param-name> + <param-value>value1</param-value> + </init-param> + </filter> + <filter> + <filter-name>Filter2</filter-name> + <filter-class>org.apache.geronimo.jetty.app.Filter2</filter-class> + <init-param> + <param-name>attribute1</param-name> + <param-value>value2</param-value> + </init-param> + </filter> + <filter-mapping> + <filter-name>Filter1</filter-name> + <servlet-name>Servlet1</servlet-name> + </filter-mapping> + <filter-mapping> + <filter-name>Filter2</filter-name> + <servlet-name>Servlet1</servlet-name> + </filter-mapping> + <servlet> + <servlet-name>Servlet1</servlet-name> + <servlet-class>org.apache.geronimo.jetty.app.Servlet1</servlet-class> + </servlet> + <servlet> + <servlet-name>Servlet2</servlet-name> + <servlet-class>org.apache.geronimo.jetty.app.Servlet2</servlet-class> + </servlet> + <servlet-mapping> + <servlet-name>Servlet1</servlet-name> + <url-pattern>/path1</url-pattern> + </servlet-mapping> + <servlet-mapping> + <servlet-name>Servlet2</servlet-name> + <url-pattern>/path2</url-pattern> + </servlet-mapping> + <session-config> + <session-timeout>60</session-timeout> + </session-config> +</web-app> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/plans/plan1.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/plans/plan1.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/plans/plan1.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/plans/plan1.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/plans/plan1.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test-resources/plans/plan1.xml Wed Dec 1 23:22:43 2004 @@ -3,6 +3,10 @@ configId="goodservlet" parentId="org/apache/geronimo/DefaultDatabase"> <context-priority-classloader>false</context-priority-classloader> + <login-domain-name>foo</login-domain-name> + <security> + <auto-map-roles security-realm="foo"/> + </security> <resource-ref> <ref-name>jdbc/DB1</ref-name> <target-name>DefaultDatabase</target-name> Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Filter1.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Filter1.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Filter1.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,45 @@ +/** + * + * Copyright 2003-2004 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.jetty.app; + +import java.io.IOException; +import javax.servlet.Filter; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.FilterChain; + +/** + * @version $Rev: $ $Date: $ + */ +public class Filter1 implements Filter { + + private FilterConfig filterConfig; + + public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + } + + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + chain.doFilter(request, response); + } + + public void destroy() { + + } +} Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Filter2.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Filter2.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Filter2.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,45 @@ +/** + * + * Copyright 2003-2004 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.jetty.app; + +import java.io.IOException; +import javax.servlet.Filter; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.FilterChain; + +/** + * @version $Rev: $ $Date: $ + */ +public class Filter2 implements Filter { + + private FilterConfig filterConfig; + + public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + } + + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + chain.doFilter(request, response); + } + + public void destroy() { + + } +} Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Servlet1.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Servlet1.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Servlet1.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,52 @@ +/** + * + * Copyright 2003-2004 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.jetty.app; + +import java.io.IOException; +import javax.servlet.Servlet; +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +/** + * @version $Rev: $ $Date: $ + */ +public class Servlet1 implements Servlet { + + private ServletConfig servletConfig; + + public void init(ServletConfig config) throws ServletException { + servletConfig = config; + } + + public ServletConfig getServletConfig() { + return servletConfig; + } + + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { + + } + + public String getServletInfo() { + return null; + } + + public void destroy() { + + } +} Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Servlet2.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Servlet2.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/app/Servlet2.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,52 @@ +/** + * + * Copyright 2003-2004 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.jetty.app; + +import java.io.IOException; +import javax.servlet.Servlet; +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +/** + * @version $Rev: $ $Date: $ + */ +public class Servlet2 implements Servlet { + + private ServletConfig servletConfig; + + public void init(ServletConfig config) throws ServletException { + servletConfig = config; + } + + public ServletConfig getServletConfig() { + return servletConfig; + } + + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { + + } + + public String getServletInfo() { + return null; + } + + public void destroy() { + + } +} Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/JettyModuleBuilderTest.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,236 @@ +/** + * + * Copyright 2003-2004 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.jetty.deployment; + +import java.util.Set; +import java.util.HashSet; +import java.util.Collections; +import java.util.List; +import java.util.Iterator; +import java.util.jar.JarFile; +import java.io.File; +import java.net.URI; +import javax.management.ObjectName; +import javax.naming.Reference; + +import junit.framework.TestCase; +import org.apache.geronimo.kernel.Kernel; +import org.apache.geronimo.kernel.config.ConfigurationModuleType; +import org.apache.geronimo.kernel.management.State; +import org.apache.geronimo.gbean.GBeanData; +import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; +import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext; +import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl; +import org.apache.geronimo.j2ee.deployment.Module; +import org.apache.geronimo.j2ee.deployment.EARContext; +import org.apache.geronimo.j2ee.deployment.RefContext; +import org.apache.geronimo.j2ee.deployment.EJBReferenceBuilder; +import org.apache.geronimo.j2ee.deployment.ResourceReferenceBuilder; +import org.apache.geronimo.jetty.JettyContainerImpl; +import org.apache.geronimo.jetty.connector.HTTPConnector; +import org.apache.geronimo.transaction.GeronimoTransactionManager; +import org.apache.geronimo.transaction.context.TransactionContextManager; +import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator; +import org.apache.geronimo.deployment.util.UnpackedJarFile; +import org.apache.geronimo.deployment.DeploymentException; +import org.apache.geronimo.security.SecurityServiceImpl; + +/** + * @version $Rev: $ $Date: $ + */ +public class JettyModuleBuilderTest extends TestCase { + + protected Kernel kernel; + private GBeanData container; + private ObjectName containerName; + private ObjectName connectorName; + private GBeanData connector; + private ObjectName webModuleName; + private ObjectName tmName; + private ObjectName ctcName; + private GBeanData tm; + private GBeanData ctc; + private ObjectName tcmName; + private GBeanData tcm; + private ClassLoader cl; + private J2eeContext moduleContext = new J2eeContextImpl("jetty.test", "test", "null", "jettyTest", null, null); + private JettyModuleBuilder builder; + private File basedir = new File(System.getProperty("basedir", ".")); + + public void testDeployWar4() throws Exception { + File outputPath = new File(basedir, "target/test-resources/deployables/war4"); + recursiveDelete(outputPath); + outputPath.mkdirs(); + File path = new File(basedir, "src/test-resources/deployables/war4"); + UnpackedJarFile jarFile = new UnpackedJarFile(path); + Module module = builder.createModule(null, jarFile); + URI id = new URI("war4"); + URI parentId = null;//new URI("org/apache/geronimo/Server"); + EARContext earContext = new EARContext( + outputPath, + id, + ConfigurationModuleType.WAR, + parentId, + kernel, + moduleContext.getJ2eeDomainName(), + moduleContext.getJ2eeServerName(), + moduleContext.getJ2eeApplicationName(), + tcmName, + ctcName, + null, + null, + new RefContext( + new EJBReferenceBuilder() { + + public Reference createEJBLocalReference(String objectName, boolean isSession, String localHome, String local) throws DeploymentException { + return null; + } + + public Reference createEJBRemoteReference(String objectName, boolean isSession, String home, String remote) throws DeploymentException { + return null; + } + }, + 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; + } + } + )); + builder.initContext(earContext, module, cl); + builder.addGBeans(earContext, module, cl); + earContext.close(); + module.close(); + GBeanData configData = earContext.getConfigurationGBeanData(); + configData.setAttribute("baseURL", path.toURL()); + kernel.loadGBean(configData, cl); + kernel.startRecursiveGBean(configData.getName()); + Set names = kernel.listGBeans(ObjectName.getInstance("jetty.test:J2EEApplication=null,J2EEServer=test,WebModule=war4,*")); + System.out.println("Object names: " + names); + for (Iterator iterator = names.iterator(); iterator.hasNext();) { + ObjectName objectName = (ObjectName) iterator.next(); + assertEquals(new Integer(State.RUNNING_INDEX), kernel.getAttribute(objectName, "state")); + } + GBeanData filterMapping2Data = kernel.getGBeanData(ObjectName.getInstance("jetty.test:J2EEApplication=null,J2EEServer=test,Servlet=Servlet1,WebFilter=Filter2,WebModule=war4,j2eeType=WebFilterMapping")); + assertEquals(Collections.singleton(ObjectName.getInstance("jetty.test:J2EEApplication=null,J2EEServer=test,Servlet=Servlet1,WebFilter=Filter1,WebModule=war4,j2eeType=WebFilterMapping")), filterMapping2Data.getReferencePatterns("Previous")); + + kernel.stopGBean(configData.getName()); + kernel.unloadGBean(configData.getName()); + + kernel.loadGBean(configData, cl); + kernel.startRecursiveGBean(configData.getName()); + kernel.stopGBean(configData.getName()); + kernel.unloadGBean(configData.getName()); + } + + private void recursiveDelete(File path) { + //does not delete top level dir passed in + File[] listing = path.listFiles(); + for (int i = 0; i < ((listing == null)? 0: listing.length); i++) { + File file = listing[i]; + if (file.isDirectory()) { + recursiveDelete(file); + } + file.delete(); + } + } + + protected void setUp() throws Exception { + 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); + + tmName = NameFactory.getComponentName(null, null, "TransactionManager", NameFactory.JTA_RESOURCE, moduleContext); + tcmName = NameFactory.getComponentName(null, null, "TransactionContextManager", NameFactory.JTA_RESOURCE, moduleContext); + ctcName = new ObjectName("geronimo.test:role=ConnectionTrackingCoordinator"); + + kernel = new Kernel("test.kernel"); + kernel.boot(); + ObjectName defaultServlets = ObjectName.getInstance("test:name=test,type=none,*"); + SecurityServiceImpl securityService = new SecurityServiceImpl("org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory"); + + builder = new JettyModuleBuilder(new URI("null"), new Integer(1800), Collections.EMPTY_LIST, containerName, defaultServlets, securityService, kernel); + + container = new GBeanData(containerName, JettyContainerImpl.GBEAN_INFO); + + connector = new GBeanData(connectorName, HTTPConnector.GBEAN_INFO); + connector.setAttribute("port", new Integer(5678)); + connector.setReferencePattern("JettyContainer", containerName); + + start(container); + start(connector); + + tm = new GBeanData(tmName, GeronimoTransactionManager.GBEAN_INFO); + Set patterns = new HashSet(); + patterns.add(ObjectName.getInstance("geronimo.server:j2eeType=JCAManagedConnectionFactory,*")); + tm.setAttribute("defaultTransactionTimeoutSeconds", new Integer(10)); + tm.setReferencePatterns("ResourceManagers", patterns); + start(tm); + tcm = new GBeanData(tcmName, TransactionContextManager.GBEAN_INFO); + tcm.setReferencePattern("TransactionManager", tmName); + start(tcm); + ctc = new GBeanData(ctcName, ConnectionTrackingCoordinator.GBEAN_INFO); + start(ctc); + } + + protected void tearDown() throws Exception { + stop(ctcName); + stop(tmName); + stop(connectorName); + stop(containerName); + kernel.shutdown(); + } + private void start(GBeanData gbeanData) throws Exception { + kernel.loadGBean(gbeanData, cl); + kernel.startGBean(gbeanData.getName()); + if (((Integer)kernel.getAttribute(gbeanData.getName(), "state")).intValue() != State.RUNNING_INDEX ) { + fail("gbean not started: " + gbeanData.getName()); + } + } + + private void stop(ObjectName name) throws Exception { + kernel.stopGBean(name); + kernel.unloadGBean(name); + } + + +} Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty-builder/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java Wed Dec 1 23:22:43 2004 @@ -1,17 +1,22 @@ package org.apache.geronimo.jetty.deployment; import java.io.File; +import java.util.ArrayList; + +import javax.management.ObjectName; import junit.framework.TestCase; import org.apache.geronimo.schema.SchemaConversionUtils; import org.apache.geronimo.xbeans.geronimo.jetty.JettyWebAppDocument; import org.apache.geronimo.xbeans.geronimo.jetty.JettyWebAppType; import org.apache.geronimo.xbeans.geronimo.naming.GerResourceRefType; +import org.apache.geronimo.kernel.jmx.JMXUtil; /** */ public class PlanParsingTest extends TestCase { - private JettyModuleBuilder builder = new JettyModuleBuilder(null, null); + ObjectName jettyContainerObjectName = JMXUtil.getObjectName("test:type=JettyContainer"); + private JettyModuleBuilder builder = new JettyModuleBuilder(null, new Integer(1800), null, jettyContainerObjectName, null, null, null); private File basedir = new File(System.getProperty("basedir", ".")); public void testResourceRef() throws Exception { Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/project.xml Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/project.xml?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/project.xml&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/project.xml&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/project.xml (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/project.xml Wed Dec 1 23:22:43 2004 @@ -47,19 +47,6 @@ <!-- ============ --> <dependencies> - <dependency> - <groupId>geronimo</groupId> - <artifactId>geronimo-xmlbeans-plugin</artifactId> - <version>${pom.currentVersion}</version> - <type>plugin</type> - </dependency> - - <!-- needed for xmlbeans runtime--> - <dependency> - <groupId>xmlbeans</groupId> - <artifactId>xbean-apache</artifactId> - <version>&xmlbeans-version;</version> - </dependency> <dependency> <groupId>geronimo</groupId> @@ -69,17 +56,8 @@ <dependency> <groupId>geronimo</groupId> - <artifactId>geronimo-deployment</artifactId> - <version>${pom.currentVersion}</version> - </dependency> - - <dependency> - <groupId>geronimo</groupId> <artifactId>geronimo-naming</artifactId> <version>${pom.currentVersion}</version> - <properties> - <xmlbeans>true</xmlbeans> - </properties> </dependency> <dependency> @@ -92,9 +70,6 @@ <groupId>geronimo</groupId> <artifactId>geronimo-security</artifactId> <version>${pom.currentVersion}</version> - <properties> - <xmlbeans>true</xmlbeans> - </properties> </dependency> <dependency> @@ -146,15 +121,6 @@ </dependency> <dependency> - <groupId>geronimo</groupId> - <artifactId>geronimo-j2ee-schema</artifactId> - <version>${pom.currentVersion}</version> - <properties> - <xmlbeans>true</xmlbeans> - </properties> - </dependency> - - <dependency> <groupId>jetty</groupId> <artifactId>org.mortbay.jetty</artifactId> <version>&jetty-version;</version> @@ -250,7 +216,7 @@ <!-- Build Specification --> <!-- =================== --> - <build> + <!--build> <resources> <resource> <directory>${basedir}/src/etc</directory> @@ -279,5 +245,5 @@ </resource> </resources> </unitTest> - </build> + </build--> </project> Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JAASJettyRealm.java Wed Dec 1 23:22:43 2004 @@ -20,17 +20,13 @@ import java.security.AccessControlException; import java.security.Principal; import java.util.HashMap; +import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; -import javax.security.auth.Subject; import javax.security.jacc.WebRoleRefPermission; 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.gbean.GBeanLifecycle; -import org.apache.geronimo.gbean.WaitingException; import org.apache.geronimo.security.ContextManager; import org.mortbay.http.HttpRequest; import org.mortbay.http.UserRealm; @@ -39,30 +35,22 @@ /** * @version $Rev$ $Date$ */ -public class JAASJettyRealm implements UserRealm, GBeanLifecycle { +public class JAASJettyRealm implements UserRealm { private static Log log = LogFactory.getLog(JAASJettyRealm.class); - private final JettyContainer container; - private String realmName; - private String loginModuleName; + private final String realmName; + private final String loginDomainName; private final HashMap userMap = new HashMap(); - public JAASJettyRealm(JettyContainer container) { - this.container = container; + public JAASJettyRealm(String realmName, String loginDomainName) { + this.realmName = realmName; + this.loginDomainName = loginDomainName; } public String getName() { return realmName; } - public void setName(String name) { - realmName = name; - } - - public void setLoginModuleName(String name) { - loginModuleName = name; - } - public Principal getPrincipal(String username) { return (Principal) userMap.get(username); } @@ -89,7 +77,7 @@ PasswordCallbackHandler callbackHandler = new PasswordCallbackHandler(username, password); //set up the login context - LoginContext loginContext = new LoginContext(loginModuleName, callbackHandler); + LoginContext loginContext = new LoginContext(loginDomainName, callbackHandler); loginContext.login(); callbackHandler.clear(); @@ -150,34 +138,4 @@ return user; } - public void doStart() throws WaitingException, Exception { - container.addRealm(this); - log.info("JAAS Jetty Realm - " + realmName + " - started"); - } - - public void doStop() throws WaitingException { - container.removeRealm(this); - log.info("JAAS Jetty Realm - " + realmName + " - stopped"); - } - - public void doFail() { - container.removeRealm(this); - log.info("JAAS Jetty Realm - " + realmName + " - failed"); - } - - public static GBeanInfo getGBeanInfo() { - return GBEAN_INFO; - } - - public static final GBeanInfo GBEAN_INFO; - - static { - GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("Jetty Realm", JAASJettyRealm.class); - infoFactory.setConstructor(new String[]{"JettyContainer"}); - infoFactory.addReference("JettyContainer", JettyContainer.class); - infoFactory.addAttribute("name", String.class, true); - infoFactory.addAttribute("loginModuleName", String.class, true); - - GBEAN_INFO = infoFactory.getBeanInfo(); - } } Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyFilterHolder.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyFilterHolder.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyFilterHolder.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,66 @@ +/** + * + * Copyright 2003-2004 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.jetty; + +import java.util.Map; + +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoBuilder; +import org.mortbay.jetty.servlet.FilterHolder; +import org.mortbay.jetty.servlet.WebApplicationHandler; + +/** + * @version $Rev: $ $Date: $ + */ +public class JettyFilterHolder extends FilterHolder { + + //todo consider an interface instead of this constructor for endpoint use. + public JettyFilterHolder() { + } + + public JettyFilterHolder(String filterName, String filterClass, Map initParams, JettyServletRegistration jettyServletRegistration) throws Exception { + super(jettyServletRegistration.getServletHandler(), filterName, filterClass); + ((WebApplicationHandler)jettyServletRegistration.getServletHandler()).addFilterHolder(this); + putAll(initParams); + start(); + } + + public String getFilterName() { + return getName(); + } + + public static final GBeanInfo GBEAN_INFO; + + static { + GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(JettyFilterHolder.class); + infoBuilder.addAttribute("filterName", String.class, true); + infoBuilder.addAttribute("filterClass", String.class, true); + infoBuilder.addAttribute("initParams", Map.class, true); + + infoBuilder.addReference("JettyServletRegistration", JettyServletRegistration.class); + + infoBuilder.setConstructor(new String[] {"filterName", "filterClass", "initParams", "JettyServletRegistration"}); + + GBEAN_INFO = infoBuilder.getBeanInfo(); + + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; + } + +} Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyFilterMapping.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyFilterMapping.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyFilterMapping.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,166 @@ +/** + * + * Copyright 2003-2004 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.jetty; + +import java.io.Serializable; + +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoBuilder; +import org.mortbay.jetty.servlet.WebApplicationHandler; +import org.mortbay.jetty.servlet.FilterHolder; + +/** + * @version $Rev: $ $Date: $ + */ +public class JettyFilterMapping implements Serializable { + + private final String urlPattern; + private final boolean requestDispatch; + private final boolean forwardDispatch; + private final boolean includeDispatch; + private final boolean errorDispatch; + private final JettyFilterHolder jettyFilterHolder; + private final JettyServletHolder jettyServletHolder; + private final JettyFilterMapping previous; + private final JettyServletRegistration jettyServletRegistration; + + //todo use an interface for endpoints. + public JettyFilterMapping() { + this.urlPattern = null; + this.requestDispatch = false; + this.forwardDispatch = false; + this.includeDispatch = false; + this.errorDispatch = false; + this.jettyFilterHolder = null; + this.jettyServletHolder = null; + this.previous = null; + this.jettyServletRegistration = null; + } + + public JettyFilterMapping(String urlPattern, + boolean requestDispatch, + boolean forwardDispatch, + boolean includeDispatch, + boolean errorDispatch, + JettyFilterHolder jettyFilterHolder, + JettyServletHolder jettyServletHolder, + JettyFilterMapping previous, + JettyServletRegistration jettyServletRegistration) { + assert jettyServletRegistration != null; + assert jettyServletHolder != null ^ urlPattern != null; + this.urlPattern = urlPattern; + this.requestDispatch = requestDispatch; + this.forwardDispatch = forwardDispatch; + this.includeDispatch = includeDispatch; + this.errorDispatch = errorDispatch; + this.jettyFilterHolder = jettyFilterHolder; + this.jettyServletHolder = jettyServletHolder; + this.previous = previous; + this.jettyServletRegistration = jettyServletRegistration; + + String filterName = jettyFilterHolder.getFilterName(); + int dispatches = 0; + if (requestDispatch) { + dispatches |= FilterHolder.__REQUEST; + } + if (forwardDispatch) { + dispatches |= FilterHolder.__FORWARD; + } + if (includeDispatch) { + dispatches |= FilterHolder.__INCLUDE; + } + if (errorDispatch) { + dispatches |= FilterHolder.__ERROR; + } + + + if (jettyServletHolder == null) { + ((WebApplicationHandler)jettyServletRegistration.getServletHandler()).addFilterPathMapping(urlPattern, filterName, dispatches); + } else { + String servletName = jettyServletHolder.getServletName(); + ((WebApplicationHandler)jettyServletRegistration.getServletHandler()).addFilterServletMapping(servletName, filterName, dispatches); + } + } + + public String getUrlPattern() { + return urlPattern; + } + + public boolean isRequestDispatch() { + return requestDispatch; + } + + public boolean isForwardDispatch() { + return forwardDispatch; + } + + public boolean isIncludeDispatch() { + return includeDispatch; + } + + public boolean isErrorDispatch() { + return errorDispatch; + } + + public JettyFilterHolder getFilter() { + return jettyFilterHolder; + } + + public JettyServletHolder getServlet() { + return jettyServletHolder; + } + + public JettyFilterMapping getPrevious() { + return previous; + } + + public JettyServletRegistration getJettyServletRegistration() { + return jettyServletRegistration; + } + + public static final GBeanInfo GBEAN_INFO; + + static { + GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(JettyFilterMapping.class); + infoBuilder.addAttribute("urlPattern", String.class, true); + infoBuilder.addAttribute("requestDispatch", boolean.class, true); + infoBuilder.addAttribute("forwardDispatch", boolean.class, true); + infoBuilder.addAttribute("includeDispatch", boolean.class, true); + infoBuilder.addAttribute("errorDispatch", boolean.class, true); + + infoBuilder.addReference("Filter", JettyFilterHolder.class); + infoBuilder.addReference("Servlet", JettyServletHolder.class); + infoBuilder.addReference("Previous", JettyFilterMapping.class); + infoBuilder.addReference("JettyServletRegistration", JettyServletRegistration.class); + + infoBuilder.setConstructor(new String[]{"urlPattern", + "requestDispatch", + "forwardDispatch", + "includeDispatch", + "errorDispatch", + "Filter", + "Servlet", + "Previous", + "JettyServletRegistration"}); + + GBEAN_INFO = infoBuilder.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; + } +} Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletHolder.java Wed Dec 1 23:22:43 2004 @@ -17,13 +17,17 @@ package org.apache.geronimo.jetty; import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.Collections; import javax.security.jacc.PolicyContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.UnavailableException; -import org.mortbay.jetty.servlet.ServletHandler; +import org.apache.geronimo.gbean.GBeanInfo; +import org.apache.geronimo.gbean.GBeanInfoBuilder; import org.mortbay.jetty.servlet.ServletHolder; import org.mortbay.jetty.servlet.ServletHttpRequest; @@ -33,22 +37,42 @@ * ServletHolder for realms that are interested in the current servlet, e.g. * current servlet name. * + * It is also being our servlet gbean for now. We could gbean-ize the superclass to avoid the thread local access. + * * @version $Rev$ $Date$ * @see org.apache.geronimo.jetty.JAASJettyRealm#isUserInRole(java.security.Principal, java.lang.String) */ public class JettyServletHolder extends ServletHolder { private static final ThreadLocal currentServletHolder = new ThreadLocal(); + //todo consider interface instead of this constructor for endpoint use. public JettyServletHolder() { - super(); + } - public JettyServletHolder(ServletHandler handler, String name, String className) { - super(handler, name, className); + public JettyServletHolder(String servletName, + String servletClassName, + String jspFile, + Map initParams, + Integer loadOnStartup, + Set servletMappings, + Map webRoleRefPermissions, + JettyServletRegistration context) throws Exception { + super(context == null? null: context.getServletHandler(), servletName, servletClassName, jspFile); + //context will be null only for use as "default servlet info holder" in deployer. + if (context != null) { + //TODO add in "classpath" if jspFile is not null. + putAll(initParams); + if (loadOnStartup != null) { + setInitOrder(loadOnStartup.intValue()); + } + context.registerServletHolder(this, servletName, servletMappings, webRoleRefPermissions == null? Collections.EMPTY_MAP: webRoleRefPermissions); + start(); + } } - public JettyServletHolder(ServletHandler handler, String name, String className, String forcedPath) { - super(handler, name, className, forcedPath); + public String getServletName() { + return getName(); } /** @@ -72,5 +96,37 @@ */ static JettyServletHolder getJettyServletHolder() { return (JettyServletHolder) currentServletHolder.get(); + } + + public static final GBeanInfo GBEAN_INFO; + + static { + GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(JettyServletHolder.class); + //todo replace with interface + infoBuilder.addInterface(ServletHolder.class); + + infoBuilder.addAttribute("servletName", String.class, true); + infoBuilder.addAttribute("servletClass", String.class, true); + infoBuilder.addAttribute("jspFile", String.class, true); + infoBuilder.addAttribute("initParams", Map.class, true); + infoBuilder.addAttribute("loadOnStartup", Integer.class, true); + infoBuilder.addAttribute("servletMappings", Set.class, true); + infoBuilder.addAttribute("webRoleRefPermissions", Map.class, true); + infoBuilder.addReference("JettyServletRegistration", JettyServletRegistration.class); + + infoBuilder.setConstructor(new String[] {"servletName", + "servletClass", + "jspFile", + "initParams", + "loadOnStartup", + "servletMappings", + "webRoleRefPermissions", + "JettyServletRegistration"}); + + GBEAN_INFO = infoBuilder.getBeanInfo(); + } + + public static GBeanInfo getGBeanInfo() { + return GBEAN_INFO; } } Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletRegistration.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletRegistration.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyServletRegistration.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,35 @@ +/** + * + * Copyright 2003-2004 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.jetty; + +import java.util.Map; +import java.util.Set; +import javax.security.jacc.PolicyContextException; + +import org.mortbay.jetty.servlet.ServletHandler; +import org.mortbay.jetty.servlet.ServletHolder; + +/** + * @version $Rev: $ $Date: $ + */ +public interface JettyServletRegistration { + + void registerServletHolder(ServletHolder servletHolder, String servletName, Set servletMappings, Map webRoleRefPermissions) throws PolicyContextException; + + ServletHandler getServletHandler(); + +} Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppContext.java Wed Dec 1 23:22:43 2004 @@ -22,11 +22,16 @@ import java.net.URI; import java.net.URL; import java.util.Set; +import java.util.Map; +import java.util.Iterator; +import java.util.Collection; +import java.util.EventListener; import javax.resource.ResourceException; import javax.transaction.HeuristicMixedException; import javax.transaction.HeuristicRollbackException; import javax.transaction.RollbackException; import javax.transaction.SystemException; +import javax.security.jacc.PolicyContextException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -46,14 +51,17 @@ import org.mortbay.http.HttpException; import org.mortbay.http.HttpRequest; import org.mortbay.http.HttpResponse; +import org.mortbay.http.Authenticator; import org.mortbay.jetty.servlet.WebApplicationContext; +import org.mortbay.jetty.servlet.WebApplicationHandler; +import org.mortbay.jetty.servlet.ServletHolder; /** * Wrapper for a WebApplicationContext that sets up its J2EE environment. * * @version $Rev$ $Date$ */ -public class JettyWebAppContext extends WebApplicationContext implements GBeanLifecycle { +public class JettyWebAppContext extends WebApplicationContext implements GBeanLifecycle, JettyServletRegistration { private static Log log = LogFactory.getLog(JettyWebAppContext.class); private final ReadOnlyContext componentContext; @@ -66,6 +74,8 @@ private final JettyContainer jettyContainer; private final URI webAppRoot; + private final WebApplicationHandler handler; + private String displayName; /** * @deprecated never use this... this is only here because Jetty WebApplicationContext is externalizable @@ -80,6 +90,7 @@ trackedConnectionAssociator = null; jettyContainer = null; webAppRoot = null; + handler = null; } public JettyWebAppContext(URI uri, @@ -113,8 +124,9 @@ this.trackedConnectionAssociator = trackedConnectionAssociator; this.jettyContainer = jettyContainer; - setDefaultsDescriptor("META-INF/default-web.xml"); - setConfigurationClassNames(new String[]{"org.apache.geronimo.jetty.JettyXMLConfiguration"}); +// setDefaultsDescriptor("META-INF/default-web.xml"); + setConfigurationClassNames(new String[]{}); +// setConfigurationClassNames(new String[]{"org.apache.geronimo.jetty.NoXMLConfiguration"}); URI root = URI.create(configurationBaseUrl.toString()); webAppRoot = root.resolve(uri); @@ -127,6 +139,9 @@ } this.classLoader = new JettyClassLoader(urls, classLoader, contextPriorityClassLoader); setClassLoader(this.classLoader); + + handler = new WebApplicationHandler(); + addHandler(handler); } //TODO tx logic may not be complete. exceptions are certainly wrong! @@ -346,28 +361,128 @@ log.info("JettyWebAppContext failed"); } + + //pass through attributes. They should be constructor params + + //TODO encourage jetty to improve their naming convention. + public void setContextParamMap(Map initParameters) { + if (initParameters != null) { + for (Iterator iterator = initParameters.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + setInitParameter((String) entry.getKey(), (String) entry.getValue()); + } + } + } + + public void setLocaleEncodingMapping(Map localeEncodingMap) { + if (localeEncodingMap != null) { + for (Iterator iterator = localeEncodingMap.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + addLocaleEncoding((String) entry.getKey(), (String) entry.getValue()); + } + } + } + + public void setListenerClassNames(Collection eventListeners) throws ClassNotFoundException, IllegalAccessException, InstantiationException { + if (eventListeners != null) { + for (Iterator iterator = eventListeners.iterator(); iterator.hasNext();) { + String listenerClassName = (String) iterator.next(); + Class clazz = loadClass(listenerClassName); + EventListener listener = (EventListener) clazz.newInstance(); + addEventListener(listener); + handler.addEventListener(listener); + } + } + } + + public void setErrorPages(Map errorPageMap) { + if (errorPageMap != null) { + for (Iterator iterator = errorPageMap.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + setErrorPage((String) entry.getKey(), (String) entry.getValue()); + } + } + } + + public void setResourceAliases(Map resourceAliasMap) { + if (resourceAliasMap != null) { + for (Iterator iterator = resourceAliasMap.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + setResourceAlias((String) entry.getKey(), (String) entry.getValue()); + } + } + } + + public void setTagLibMap(Map tagLibMap) { + setResourceAliases(tagLibMap); + } + + public void setSessionTimeoutSeconds(int seconds) { + handler.setSessionInactiveInterval(seconds); + } + + + //TODO this is really dumb, but jetty likes to set the displayname to null frequently. + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + super.setDisplayName(displayName); + } + + + public void registerServletHolder(ServletHolder servletHolder, String servletName, Set servletMappings, Map webRoleRefPermissions) throws PolicyContextException { + //TODO filters + handler.addServletHolder(servletHolder); + for (Iterator iterator = servletMappings.iterator(); iterator.hasNext();) { + String urlPattern = (String) iterator.next(); + handler.mapPathToServlet(urlPattern, servletName); + } + } + public static final GBeanInfo GBEAN_INFO; static { - GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("Jetty WebApplication Context", JettyWebAppContext.class); + GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder("Jetty WebApplication Context", JettyWebAppContext.class); + //from jetty's webapp context - infoFactory.addAttribute("uri", URI.class, true); - infoFactory.addAttribute("componentContext", ReadOnlyContext.class, true); - infoFactory.addAttribute("userTransaction", OnlineUserTransaction.class, true); - infoFactory.addAttribute("classLoader", ClassLoader.class, false); - infoFactory.addAttribute("webClassPath", URI[].class, true); - infoFactory.addAttribute("contextPriorityClassLoader", boolean.class, true); - infoFactory.addAttribute("configurationBaseUrl", URL.class, true); - infoFactory.addAttribute("unshareableResources", Set.class, true); - infoFactory.addAttribute("applicationManagedSecurityResources", Set.class, true); - - infoFactory.addAttribute("contextPath", String.class, true); - - infoFactory.addReference("TransactionContextManager", TransactionContextManager.class); - infoFactory.addReference("TrackedConnectionAssociator", TrackedConnectionAssociator.class); - infoFactory.addReference("JettyContainer", JettyContainer.class); + infoBuilder.addAttribute("displayName", String.class, true); + infoBuilder.addAttribute("contextParamMap", Map.class, true); + infoBuilder.addAttribute("listenerClassNames", Collection.class, true); + infoBuilder.addAttribute("distributable", boolean.class, true); + + infoBuilder.addAttribute("mimeMap", Map.class, true); + infoBuilder.addAttribute("welcomeFiles", String[].class, true); + infoBuilder.addAttribute("localeEncodingMapping", Map.class, true); + infoBuilder.addAttribute("errorPages", Map.class, true); + infoBuilder.addAttribute("resourceAliases", Map.class, true); + infoBuilder.addAttribute("authenticator", Authenticator.class, true); + infoBuilder.addAttribute("realmName", String.class, true); + infoBuilder.addAttribute("tagLibMap", Map.class, true); + infoBuilder.addAttribute("sessionTimeoutSeconds", int.class, true); + + + infoBuilder.addAttribute("uri", URI.class, true); + infoBuilder.addAttribute("componentContext", ReadOnlyContext.class, true); + infoBuilder.addAttribute("userTransaction", OnlineUserTransaction.class, true); + infoBuilder.addAttribute("classLoader", ClassLoader.class, false); + infoBuilder.addAttribute("webClassPath", URI[].class, true); + infoBuilder.addAttribute("contextPriorityClassLoader", boolean.class, true); + infoBuilder.addAttribute("configurationBaseUrl", URL.class, true); + infoBuilder.addAttribute("unshareableResources", Set.class, true); + infoBuilder.addAttribute("applicationManagedSecurityResources", Set.class, true); + + infoBuilder.addAttribute("contextPath", String.class, true); + + infoBuilder.addReference("TransactionContextManager", TransactionContextManager.class); + infoBuilder.addReference("TrackedConnectionAssociator", TrackedConnectionAssociator.class); + infoBuilder.addReference("JettyContainer", JettyContainer.class); - infoFactory.setConstructor(new String[]{ + infoBuilder.addInterface(JettyServletRegistration.class); + + infoBuilder.setConstructor(new String[]{ "uri", "componentContext", "userTransaction", @@ -379,13 +494,14 @@ "applicationManagedSecurityResources", "TransactionContextManager", "TrackedConnectionAssociator", - "JettyContainer", + "JettyContainer" }); - GBEAN_INFO = infoFactory.getBeanInfo(); + GBEAN_INFO = infoBuilder.getBeanInfo(); } public static GBeanInfo getGBeanInfo() { return GBEAN_INFO; } + } Deleted: /geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppHandler.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppHandler.java?view=auto&rev=109463 ============================================================================== Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java Wed Dec 1 23:22:43 2004 @@ -23,45 +23,49 @@ import java.net.URL; import java.security.AccessControlContext; import java.security.AccessControlException; +import java.security.Permission; import java.security.Principal; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; import javax.security.auth.Subject; import javax.security.jacc.PolicyConfiguration; import javax.security.jacc.PolicyConfigurationFactory; import javax.security.jacc.PolicyContext; import javax.security.jacc.PolicyContextException; import javax.security.jacc.WebResourcePermission; +import javax.security.jacc.WebRoleRefPermission; import javax.security.jacc.WebUserDataPermission; -import javax.management.ObjectName; -import javax.management.MalformedObjectNameException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.geronimo.common.GeronimoSecurityException; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; import org.apache.geronimo.gbean.WaitingException; +import org.apache.geronimo.kernel.Kernel; import org.apache.geronimo.naming.java.ReadOnlyContext; import org.apache.geronimo.security.ContextManager; -import org.apache.geronimo.common.GeronimoSecurityException; import org.apache.geronimo.security.IdentificationPrincipal; import org.apache.geronimo.security.PrimaryRealmPrincipal; import org.apache.geronimo.security.RealmPrincipal; import org.apache.geronimo.security.SubjectId; -import org.apache.geronimo.security.SecurityService; -import org.apache.geronimo.security.realm.SecurityRealm; +import org.apache.geronimo.security.deploy.AutoMapAssistant; import org.apache.geronimo.security.deploy.DefaultPrincipal; +import org.apache.geronimo.security.deploy.Realm; +import org.apache.geronimo.security.deploy.Role; import org.apache.geronimo.security.deploy.Security; -import org.apache.geronimo.security.deploy.AutoMapAssistant; +import org.apache.geronimo.security.jacc.RoleMappingConfiguration; +import org.apache.geronimo.security.realm.SecurityRealm; import org.apache.geronimo.security.util.ConfigurationUtil; -import org.apache.geronimo.transaction.TrackedConnectionAssociator; import org.apache.geronimo.transaction.OnlineUserTransaction; +import org.apache.geronimo.transaction.TrackedConnectionAssociator; import org.apache.geronimo.transaction.context.TransactionContextManager; -import org.apache.geronimo.kernel.Kernel; - import org.mortbay.http.Authenticator; import org.mortbay.http.HttpException; import org.mortbay.http.HttpRequest; @@ -70,6 +74,7 @@ import org.mortbay.http.SecurityConstraint; import org.mortbay.http.UserRealm; import org.mortbay.jetty.servlet.FormAuthenticator; +import org.mortbay.jetty.servlet.ServletHolder; import org.mortbay.jetty.servlet.ServletHttpRequest; import org.mortbay.util.LazyList; @@ -87,7 +92,6 @@ private final Kernel kernel; private final String policyContextID; private final Security securityConfig; - private final SecurityService securityService; private final JAASJettyPrincipal defaultPrincipal; private PolicyConfigurationFactory factory; @@ -98,31 +102,54 @@ private String formLoginPath; + //from jettyxmlconfiguration + private final Set securityRoles; +// private final Map uncheckedPatterns; +// private final Map excludedPatterns; +// private final Map rolesPatterns; +// private final Set allSet; + + private final Set excludedPermissions; + private final Set uncheckedPermissions; + private final Map rolePermissions; + + public JettyWebAppJACCContext() { kernel = null; policyContextID = null; securityConfig = null; - securityService = null; defaultPrincipal = null; - } - - public JettyWebAppJACCContext( - Kernel kernel, - URI uri, - ReadOnlyContext componentContext, - OnlineUserTransaction userTransaction, - ClassLoader classLoader, - URI[] webClassPath, - boolean contextPriorityClassLoader, - URL configurationBaseUrl, - Set unshareableResources, - Set applicationManagedSecurityResources, - String policyContextID, - Security securityConfig, - SecurityService securityService, - TransactionContextManager transactionContextManager, - TrackedConnectionAssociator trackedConnectionAssociator, - JettyContainer jettyContainer) throws MalformedURLException { + this.securityRoles = null; + this.excludedPermissions = null; + this.uncheckedPermissions = null; + this.rolePermissions = null; +// this.allSet = null; + } + + public JettyWebAppJACCContext(URI uri, + ReadOnlyContext componentContext, + OnlineUserTransaction userTransaction, + ClassLoader classLoader, + URI[] webClassPath, + boolean contextPriorityClassLoader, + URL configurationBaseUrl, + Set unshareableResources, + Set applicationManagedSecurityResources, + String policyContextID, + String realmName, + String loginDomainName, + Security securityConfig, + //from jettyxmlconfig + Set securityRoles, + Set uncheckedPermissions, + Set excludedPermissions, + Map rolePermissions, +// Set allSet, + + TransactionContextManager transactionContextManager, + TrackedConnectionAssociator trackedConnectionAssociator, + JettyContainer jettyContainer, + Kernel kernel) throws MalformedURLException { super(uri, componentContext, @@ -138,15 +165,22 @@ jettyContainer); this.kernel = kernel; + setRealmName(realmName); + //set the JAASJettyRealm as our realm. + JAASJettyRealm realm = new JAASJettyRealm(realmName, loginDomainName); + setRealm(realm); + this.policyContextID = policyContextID; this.securityConfig = securityConfig; - this.securityService = securityService; - this.defaultPrincipal = generateDefaultPrincipal(securityConfig); - /** - * We want to use our own web-app handler. - */ - addHandler(new JettyWebAppHandler()); + this.securityRoles = securityRoles; + this.uncheckedPermissions = uncheckedPermissions; + this.excludedPermissions = excludedPermissions; + this.rolePermissions = rolePermissions; +// this.allSet = allSet; + + this.defaultPrincipal = generateDefaultPrincipal(securityConfig, loginDomainName); + } public Kernel getKernel() { @@ -161,10 +195,6 @@ return securityConfig; } - public SecurityService getSecurityService() { - return securityService; - } - public Subject getRoleDesignate(String roleName) { return (Subject) roleDesignates.get(roleName); } @@ -173,19 +203,32 @@ roleDesignates.put(roleName, subject); } + public void registerServletHolder(ServletHolder servletHolder, String servletName, Set servletMappings, Map webRoleRefPermissions) throws PolicyContextException { + super.registerServletHolder(servletHolder, servletName, servletMappings, webRoleRefPermissions); + + policyConfiguration = factory.getPolicyConfiguration(policyContextID, false); + for (Iterator iterator = webRoleRefPermissions.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + String roleName = (String) entry.getKey(); + WebRoleRefPermission webRoleRefPermission = (WebRoleRefPermission) entry.getValue(); + policyConfiguration.addToRole(roleName, webRoleRefPermission); + } + policyConfiguration.commit(); + } + /** * Handler request. * Call each HttpHandler until request is handled. * * @param pathInContext path in context - * @param pathParams path parameters such as encoded Session ID - * @param httpRequest the request object - * @param httpResponse the response object + * @param pathParams path parameters such as encoded Session ID + * @param httpRequest the request object + * @param httpResponse the response object */ public void handle(String pathInContext, - String pathParams, - HttpRequest httpRequest, - HttpResponse httpResponse) + String pathParams, + HttpRequest httpRequest, + HttpResponse httpResponse) throws HttpException, IOException { String savedPolicyContextID = PolicyContext.getContextID(); @@ -210,8 +253,8 @@ * but, to decide whether we should attempt to authenticate the request. * * @param pathSpec The path spec to which the secuiryt cosntraint applies - * @param sc the security constraint - * TODO Jetty to provide access to this map so we can remove this method + * @param sc the security constraint + * TODO Jetty to provide access to this map so we can remove this method * @see org.mortbay.http.HttpContext#addSecurityConstraint(java.lang.String, org.mortbay.http.SecurityConstraint) */ public void addSecurityConstraint(String pathSpec, SecurityConstraint sc) { @@ -230,8 +273,8 @@ * Check the security constraints using JACC. * * @param pathInContext path in context - * @param request HTTP request - * @param response HTTP response + * @param request HTTP request + * @param response HTTP response * @return true if the path in context passes the security check, * false if it fails or a redirection has occured during authentication. */ @@ -284,8 +327,8 @@ * principal. This is automatically done by <code>JAASJettyRealm</code>. * * @param pathInContext path in context - * @param request HTTP request - * @param response HTTP response + * @param request HTTP request + * @param response HTTP response * @return <code>null</code> if there is no authenticated user at the moment * and security checking should not proceed and servlet handling should also * not proceed, e.g. redirect. <code>SecurityConstraint.__NOBODY</code> if @@ -380,9 +423,10 @@ * Generate the default principal from the security config. * * @param securityConfig The Geronimo security configuration. + * @param loginDomainName * @return the default principal */ - protected JAASJettyPrincipal generateDefaultPrincipal(Security securityConfig) throws GeronimoSecurityException { + protected JAASJettyPrincipal generateDefaultPrincipal(Security securityConfig, String loginDomainName) throws GeronimoSecurityException { DefaultPrincipal defaultPrincipal = securityConfig.getDefaultPrincipal(); if (defaultPrincipal == null) { @@ -396,7 +440,7 @@ org.apache.geronimo.security.deploy.Principal principal = assistant.obtainDefaultPrincipal(); defaultPrincipal = new DefaultPrincipal(); defaultPrincipal.setPrincipal(principal); - defaultPrincipal.setRealmName(((SecurityRealm)assistant).getRealmName()); + defaultPrincipal.setRealmName(((SecurityRealm) assistant).getRealmName()); } } catch (MalformedObjectNameException e) { throw new GeronimoSecurityException("Bad object name geronimo.security:type=SecurityRealm,realm=" + config.getSecurityRealm()); @@ -405,20 +449,18 @@ } if (defaultPrincipal == null) throw new GeronimoSecurityException("Unable to generate default principal"); - return generateDefaultPrincipal(securityConfig, defaultPrincipal); + return generateDefaultPrincipal(securityConfig, defaultPrincipal, loginDomainName); } - protected JAASJettyPrincipal generateDefaultPrincipal(Security securityConfig, DefaultPrincipal defaultPrincipal) throws GeronimoSecurityException { + protected JAASJettyPrincipal generateDefaultPrincipal(Security securityConfig, DefaultPrincipal defaultPrincipal, String loginDomainName) throws GeronimoSecurityException { JAASJettyPrincipal result = new JAASJettyPrincipal("default"); Subject defaultSubject = new Subject(); - //todo: needs a proper login domain name to go with the realm name - RealmPrincipal realmPrincipal = ConfigurationUtil.generateRealmPrincipal(defaultPrincipal.getPrincipal(), defaultPrincipal.getRealmName(), defaultPrincipal.getRealmName()); + RealmPrincipal realmPrincipal = ConfigurationUtil.generateRealmPrincipal(defaultPrincipal.getPrincipal(), loginDomainName, defaultPrincipal.getRealmName()); if (realmPrincipal == null) { throw new GeronimoSecurityException("Unable to create realm principal"); } - //todo: needs a proper login domain name to go with the realm name - PrimaryRealmPrincipal primaryRealmPrincipal = ConfigurationUtil.generatePrimaryRealmPrincipal(defaultPrincipal.getPrincipal(), defaultPrincipal.getRealmName(), defaultPrincipal.getRealmName()); + PrimaryRealmPrincipal primaryRealmPrincipal = ConfigurationUtil.generatePrimaryRealmPrincipal(defaultPrincipal.getPrincipal(), loginDomainName, defaultPrincipal.getRealmName()); if (primaryRealmPrincipal == null) { throw new GeronimoSecurityException("Unable to create primary realm principal"); } @@ -462,12 +504,9 @@ factory = PolicyConfigurationFactory.getPolicyConfigurationFactory(); policyConfiguration = factory.getPolicyConfiguration(policyContextID, true); - Configuration[] configurations = getConfigurations(); - for (int i = 0; i < configurations.length; i++) { - if (configurations[i] instanceof JettyXMLConfiguration) { - ((JettyXMLConfiguration) configurations[i]).configure(policyConfiguration, securityConfig); - } - } + configure(); +// configure(policyConfiguration); + addRoleMappings((RoleMappingConfiguration) policyConfiguration, securityConfig); policyConfiguration.commit(); } catch (ClassNotFoundException e) { // do nothing @@ -540,18 +579,213 @@ log.info("JettyWebAppJACCContext failed"); } + +//from jettyxmlconfig + + private void configure() throws GeronimoSecurityException { + try { + for (Iterator iterator = excludedPermissions.iterator(); iterator.hasNext();) { + Permission permission = (Permission) iterator.next(); + policyConfiguration.addToExcludedPolicy(permission); + } + for (Iterator iterator = uncheckedPermissions.iterator(); iterator.hasNext();) { + Permission permission = (Permission) iterator.next(); + policyConfiguration.addToUncheckedPolicy(permission); + } + for (Iterator iterator = rolePermissions.entrySet().iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + String roleName = (String) entry.getKey(); + Set permissions = (Set) entry.getValue(); + for (Iterator iterator1 = permissions.iterator(); iterator1.hasNext();) { + Permission permission = (Permission) iterator1.next(); + policyConfiguration.addToRole(roleName, permission); + } + } + } catch (PolicyContextException e) { + throw new GeronimoSecurityException(e); + } + } + /** + * This method dumps the intermediate security information into the JACC + * PolicyConfiguration. + * +// * @param configuration the JACC PolicyConfiguration + */ +// public void configure(PolicyConfiguration configuration) throws GeronimoSecurityException { +// +// Set allSet = new HashSet(excludedPatterns.values()); +// allSet.addAll(rolesPatterns.values()); +// allSet.addAll(uncheckedPatterns.values()); +// try { +// Iterator iter = excludedPatterns.keySet().iterator(); +// while (iter.hasNext()) { +// URLPattern pattern = (URLPattern) excludedPatterns.get(iter.next()); +// String name = pattern.getQualifiedPattern(allSet); +// String actions = pattern.getMethods(); +// +// configuration.addToExcludedPolicy(new WebResourcePermission(name, actions)); +// configuration.addToExcludedPolicy(new WebUserDataPermission(name, actions)); +// } +// +// iter = rolesPatterns.keySet().iterator(); +// while (iter.hasNext()) { +// URLPattern pattern = (URLPattern) rolesPatterns.get(iter.next()); +// String name = pattern.getQualifiedPattern(allSet); +// String actions = pattern.getMethods(); +// WebResourcePermission permission = new WebResourcePermission(name, actions); +// +// Iterator names = pattern.getRoles().iterator(); +// while (names.hasNext()) { +// configuration. addToRole((String) names.next(), permission); +// } +// } +// +// iter = uncheckedPatterns.keySet().iterator(); +// while (iter.hasNext()) { +// URLPattern pattern = (URLPattern) uncheckedPatterns.get(iter.next()); +// String name = pattern.getQualifiedPattern(allSet); +// String actions = pattern.getMethods(); +// +// configuration.addToUncheckedPolicy(new WebResourcePermission(name, actions)); +// } +// +// iter = rolesPatterns.keySet().iterator(); +// while (iter.hasNext()) { +// URLPattern pattern = (URLPattern) rolesPatterns.get(iter.next()); +// String name = pattern.getQualifiedPattern(allSet); +// String actions = pattern.getMethodsWithTransport(); +// +// configuration.addToUncheckedPolicy(new WebUserDataPermission(name, actions)); +// } +// +// iter = uncheckedPatterns.keySet().iterator(); +// while (iter.hasNext()) { +// URLPattern pattern = (URLPattern) uncheckedPatterns.get(iter.next()); +// String name = pattern.getQualifiedPattern(allSet); +// String actions = pattern.getMethodsWithTransport(); +// +// configuration.addToUncheckedPolicy(new WebUserDataPermission(name, actions)); +// } +// +// /** +// * A <code>WebResourcePermission</code> and a <code>WebUserDataPermission</code> must be instantiated for +// * each <tt>url-pattern</tt> in the deployment descriptor and the default pattern "/", that is not combined +// * by the <tt>web-resource-collection</tt> elements of the deployment descriptor with ever HTTP method +// * value. The permission objects must be contructed using the qualified pattern as their name and with +// * actions defined by the subset of the HTTP methods that do not occur in combination with the pattern. +// * The resulting permissions that must be added to the unchecked policy statements by calling the +// * <code>addToUncheckedPolcy</code> method on the <code>PolicyConfiguration</code> object. +// */ +// iter = allSet.iterator(); +// while (iter.hasNext()) { +// URLPattern pattern = (URLPattern) iter.next(); +// String name = pattern.getQualifiedPattern(allSet); +// String actions = pattern.getComplementedMethods(); +// +// if (actions.length() == 0) { +// continue; +// } +// +// configuration.addToUncheckedPolicy(new WebResourcePermission(name, actions)); +// configuration.addToUncheckedPolicy(new WebUserDataPermission(name, actions)); +// } +// +// URLPattern pattern = new URLPattern("/"); +// if (!allSet.contains(pattern)) { +// String name = pattern.getQualifiedPattern(allSet); +// String actions = pattern.getComplementedMethods(); +// +// configuration.addToUncheckedPolicy(new WebResourcePermission(name, actions)); +// configuration.addToUncheckedPolicy(new WebUserDataPermission(name, actions)); +// } +// +// +//// Iterator keys = roleRefs.keySet().iterator(); +//// while (keys.hasNext()) { +//// String roleLink = (String) keys.next(); +//// iter = ((Set) roleRefs.get(roleLink)).iterator(); +//// +//// while (iter.hasNext()) { +//// configuration.addToRole(roleLink, (WebRoleRefPermission) iter.next()); +//// } +//// } +//// +//// keys = servletRoles.keySet().iterator(); +//// while (keys.hasNext()) { +//// String servletName = (String) keys.next(); +//// Set roles = new HashSet(securityRoles); +//// +//// roles.removeAll((Set) servletRoles.get(servletName)); +//// +//// iter = roles.iterator(); +//// while (iter.hasNext()) { +//// String roleName = (String) iter.next(); +//// configuration.addToRole(roleName, new WebRoleRefPermission(servletName, roleName)); +//// } +//// } +// +// } catch (ClassCastException cce) { +// throw new GeronimoSecurityException("Policy configuration object does not implement RoleMappingConfiguration", cce.getCause()); +// } catch (PolicyContextException e) { +// throw new GeronimoSecurityException(e); +// } +// } + + protected void addRoleMappings(RoleMappingConfiguration roleMapper, Security security) throws PolicyContextException, GeronimoSecurityException { + + Iterator roleMappings = security.getRoleMappings().values().iterator(); + while (roleMappings.hasNext()) { + Role role = (Role) roleMappings.next(); + String roleName = role.getRoleName(); + Set principalSet = new HashSet(); + + if (!securityRoles.contains(roleName)) throw new GeronimoSecurityException("Role does not exist in this configuration"); + + Subject roleDesignate = new Subject(); + + Iterator realms = role.getRealms().values().iterator(); + while (realms.hasNext()) { + Realm realm = (Realm) realms.next(); + + Iterator principals = realm.getPrincipals().iterator(); + while (principals.hasNext()) { + org.apache.geronimo.security.deploy.Principal principal = (org.apache.geronimo.security.deploy.Principal) principals.next(); + + //todo: The next line must use a login domain name, which I guess means that neds to go in the geronimo-jetty.xml + RealmPrincipal realmPrincipal = ConfigurationUtil.generateRealmPrincipal(principal, realm.getRealmName(), realm.getRealmName()); + if (realmPrincipal == null) throw new GeronimoSecurityException("Unable to create realm principal"); + + principalSet.add(realmPrincipal); + if (principal.isDesignatedRunAs()) roleDesignate.getPrincipals().add(realmPrincipal); + } + } + roleMapper.addRoleMapping(roleName, principalSet); + + if (roleDesignate.getPrincipals().size() > 0) { + setRoleDesignate(roleName, roleDesignate); + } + } + } + + //=============================================================================== public static final GBeanInfo GBEAN_INFO; static { - GBeanInfoBuilder infoFactory = new GBeanInfoBuilder("Jetty JACC WebApplication Context", JettyWebAppJACCContext.class, JettyWebAppContext.GBEAN_INFO); + GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder("Jetty JACC WebApplication Context", JettyWebAppJACCContext.class, JettyWebAppContext.GBEAN_INFO); - infoFactory.addAttribute("kernel", Kernel.class, false); - infoFactory.addAttribute("policyContextID", String.class, true); - infoFactory.addAttribute("securityConfig", Security.class, true); - infoFactory.addReference("SecurityService", SecurityService.class); + infoBuilder.addAttribute("policyContextID", String.class, true); +// infoBuilder.addAttribute("userRealmName", String.class, true); + infoBuilder.addAttribute("loginDomainName", String.class, true); + infoBuilder.addAttribute("securityConfig", Security.class, true); - infoFactory.setConstructor(new String[]{ - "kernel", + infoBuilder.addAttribute("securityRoles", Set.class, true); + infoBuilder.addAttribute("uncheckedPermissions", Set.class, true); + infoBuilder.addAttribute("excludedPermissions", Set.class, true); + infoBuilder.addAttribute("rolePermissions", Map.class, true); + + infoBuilder.addAttribute("kernel", Kernel.class, false); + + infoBuilder.setConstructor(new String[]{ "uri", "componentContext", "userTransaction", @@ -562,14 +796,22 @@ "unshareableResources", "applicationManagedSecurityResources", "policyContextID", + "realmName", + "loginDomainName", "securityConfig", - "SecurityService", + + "securityRoles", + "uncheckedPermissions", + "excludedPermissions", + "rolePermissions", + "TransactionContextManager", "TrackedConnectionAssociator", "JettyContainer", + "kernel", }); - GBEAN_INFO = infoFactory.getBeanInfo(); + GBEAN_INFO = infoBuilder.getBeanInfo(); } public static GBeanInfo getGBeanInfo() { Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java Wed Dec 1 23:22:43 2004 @@ -61,9 +61,9 @@ private final Map uncheckedPatterns = new HashMap(); private final Map excludedPatterns = new HashMap(); private final Map rolesPatterns = new HashMap(); - private final Set allSet = new HashSet(); + private final Set allSet = new HashSet(); // == allMap.values() private final Map allMap = new HashMap(); - private final Set allRoles = new HashSet(); + private final Set allRoles = new HashSet(); //these are url patterms for * role spec. private final Map roleRefs = new HashMap(); private final Map servletRoles = new HashMap(); Added: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java?view=auto&rev=109464 ============================================================================== --- (empty file) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/AbstractWebModuleTest.java Wed Dec 1 23:22:43 2004 @@ -0,0 +1,261 @@ +/** + * + * Copyright 2003-2004 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.jetty; + +import java.util.Map; +import java.util.HashMap; +import java.util.Collections; +import java.util.Set; +import java.util.HashSet; +import java.util.Properties; +import java.net.URI; +import java.io.File; + +import javax.management.ObjectName; + +import junit.framework.TestCase; +import org.apache.geronimo.gbean.GBeanData; +import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; +import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext; +import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl; +import org.apache.geronimo.transaction.OnlineUserTransaction; +import org.apache.geronimo.transaction.GeronimoTransactionManager; +import org.apache.geronimo.transaction.context.TransactionContextManager; +import org.apache.geronimo.kernel.management.State; +import org.apache.geronimo.kernel.Kernel; +import org.apache.geronimo.jetty.connector.HTTPConnector; +import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator; +import org.apache.geronimo.security.SecurityServiceImpl; +import org.apache.geronimo.security.deploy.Security; +import org.apache.geronimo.security.realm.GenericSecurityRealm; +import org.apache.geronimo.security.jaas.JaasLoginService; +import org.apache.geronimo.security.jaas.LoginModuleGBean; +import org.apache.geronimo.system.serverinfo.ServerInfo; +import org.mortbay.jetty.servlet.FormAuthenticator; + +/** + * @version $Rev: $ $Date: $ + */ +public class AbstractWebModuleTest extends TestCase { + protected Kernel kernel; + private GBeanData container; + private ObjectName containerName; + private ObjectName connectorName; + private GBeanData connector; + private ObjectName webModuleName; + private ObjectName tmName; + private ObjectName ctcName; + private GBeanData tm; + private GBeanData ctc; + private ObjectName tcmName; + private GBeanData tcm; + private ClassLoader cl; + private J2eeContext moduleContext = new J2eeContextImpl("jetty.test", "test", "null", "jettyTest", null, null); + private GBeanData securityServiceGBean; + protected ObjectName securityServiceName; + private ObjectName loginServiceName; + private GBeanData loginServiceGBean; + protected GBeanData propertiesLMGBean; + protected ObjectName propertiesLMName; + private ObjectName propertiesRealmName; + private GBeanData propertiesRealmGBean; + private ObjectName serverInfoName; + private GBeanData serverInfoGBean; + + protected void setUpStaticContentServlet() throws Exception { + GBeanData staticContentServletGBeanData = new GBeanData(JettyServletHolder.GBEAN_INFO); + staticContentServletGBeanData.setAttribute("servletName", "default"); + staticContentServletGBeanData.setAttribute("servletClass", "org.mortbay.jetty.servlet.Default"); + Map staticContentServletInitParams = new HashMap(); + staticContentServletInitParams.put("acceptRanges", "true"); + staticContentServletInitParams.put("dirAllowed", "true"); + staticContentServletInitParams.put("putAllowed", "false"); + staticContentServletInitParams.put("delAllowed", "false"); + staticContentServletInitParams.put("redirectWelcome", "false"); + staticContentServletInitParams.put("minGzipLength", "8192"); + staticContentServletGBeanData.setAttribute("initParams", staticContentServletInitParams); + staticContentServletGBeanData.setAttribute("loadOnStartup", new Integer(0)); + staticContentServletGBeanData.setAttribute("servletMappings", Collections.singleton(new String("/"))); + ObjectName staticContentServletObjectName = NameFactory.getResourceComponentName(null, null, null, null, (String) staticContentServletGBeanData.getAttribute("servletName"), NameFactory.SERVLET, moduleContext); + staticContentServletGBeanData.setName(staticContentServletObjectName); + staticContentServletGBeanData.setReferencePattern("JettyServletRegistration", webModuleName); + + start(staticContentServletGBeanData); + } + + protected void setUpInsecureAppContext() throws Exception { + GBeanData app = new GBeanData(webModuleName, JettyWebAppContext.GBEAN_INFO); + app.setAttribute("uri", URI.create("war1/")); + app.setAttribute("componentContext", null); + OnlineUserTransaction userTransaction = new OnlineUserTransaction(); + app.setAttribute("userTransaction", userTransaction); + //we have no classes or libs. + app.setAttribute("webClassPath", new URI[] {}); + app.setAttribute("contextPriorityClassLoader", Boolean.FALSE); + app.setAttribute("configurationBaseUrl", new File("src/test-resources/deployables/").toURL()); +// app.setAttribute("configurationBaseUrl", Thread.currentThread().getContextClassLoader().getResource("deployables/")); + app.setReferencePattern("TransactionContextManager", tcmName); + app.setReferencePattern("TrackedConnectionAssociator", ctcName); + app.setReferencePattern("JettyContainer", containerName); + + app.setAttribute("contextPath", "/test"); + + start(app); + } + + protected void setUpSecureAppContext(Security securityConfig, Set uncheckedPermissions, Set excludedPermissions, Map rolePermissions, Set securityRoles) throws Exception { + GBeanData app = new GBeanData(webModuleName, JettyWebAppJACCContext.GBEAN_INFO); + app.setAttribute("userRealmName", "Test JAAS Realm"); + app.setAttribute("securityRealmName", "jaasTest"); + app.setAttribute("securityConfig", securityConfig); + app.setAttribute("uncheckedPermissions", uncheckedPermissions); + app.setAttribute("excludedPermissions", excludedPermissions); + app.setAttribute("rolePermissions", rolePermissions); + app.setAttribute("securityRoles", securityRoles); + FormAuthenticator formAuthenticator = new FormAuthenticator(); + formAuthenticator.setLoginPage("/auth/logon.html?param=test"); + formAuthenticator.setErrorPage("/auth/logonError.html?param=test"); + app.setAttribute("realmName", "Test JAAS Realm"); + app.setAttribute("authenticator", formAuthenticator); +// app.setReferencePattern("SecurityService", securityServiceName); + app.setAttribute("policyContextID", "TEST"); + app.setAttribute("uri", URI.create("war3/")); + app.setAttribute("componentContext", null); + OnlineUserTransaction userTransaction = new OnlineUserTransaction(); + app.setAttribute("userTransaction", userTransaction); + //we have no classes or libs. + app.setAttribute("webClassPath", new URI[] {}); + app.setAttribute("contextPriorityClassLoader", Boolean.FALSE); + app.setAttribute("configurationBaseUrl", new File("src/test-resources/deployables/").toURL()); +// app.setAttribute("configurationBaseUrl", Thread.currentThread().getContextClassLoader().getResource("deployables/")); + app.setReferencePattern("TransactionContextManager", tcmName); + app.setReferencePattern("TrackedConnectionAssociator", ctcName); + app.setReferencePattern("JettyContainer", containerName); + + app.setAttribute("contextPath", "/test"); + + start(app); + } + + protected void setUpSecurity() throws Exception { + securityServiceName = new ObjectName("geronimo.security:type=SecurityService"); + securityServiceGBean = new GBeanData(securityServiceName, SecurityServiceImpl.GBEAN_INFO); + securityServiceGBean.setReferencePatterns("Realms", Collections.singleton(new ObjectName("geronimo.security:type=SecurityRealm,*"))); + securityServiceGBean.setReferencePatterns("Mappers", Collections.singleton(new ObjectName("geronimo.security:type=SecurityRealm,*"))); + securityServiceGBean.setAttribute("policyConfigurationFactory", "org.apache.geronimo.security.jacc.GeronimoPolicyConfigurationFactory"); + + loginServiceName = new ObjectName("geronimo.security:type=JaasLoginService"); + loginServiceGBean = new GBeanData(loginServiceName, JaasLoginService.GBEAN_INFO); + loginServiceGBean.setReferencePatterns("Realms", Collections.singleton(new ObjectName("geronimo.security:type=SecurityRealm,*"))); +// loginServiceGBean.setAttribute("reclaimPeriod", new Long(1000 * 1000)); + loginServiceGBean.setAttribute("algorithm", "HmacSHA1"); + loginServiceGBean.setAttribute("password", "secret"); + + serverInfoName = new ObjectName("geronimo.system:role=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"); + propertiesLMGBean.setAttribute("serverSide", Boolean.TRUE); + Properties options = new Properties(); + options.setProperty("usersURI", new File(new File("."), "src/test-resources/data/users.properties").toString()); + options.setProperty("groupsURI", new File(new File("."), "src/test-resources/data/groups.properties").toString()); + propertiesLMGBean.setAttribute("options", options); + + propertiesRealmName = new ObjectName("geronimo.security:type=SecurityRealm,realm=demo-properties-realm"); + propertiesRealmGBean = new GBeanData(propertiesRealmName, GenericSecurityRealm.GBEAN_INFO); + propertiesRealmGBean.setReferencePatterns("ServerInfo", Collections.singleton(serverInfoName)); + propertiesRealmGBean.setAttribute("realmName", "demo-properties-realm"); + Properties config = new Properties(); + config.setProperty("LoginModule.1.REQUIRED", propertiesLMName.getCanonicalName()); + propertiesRealmGBean.setAttribute("loginModuleConfiguration", config); +// propertiesRealmGBean.setAttribute("autoMapPrincipalClasses", "org.apache.geronimo.security.realm.providers.PropertiesFileGroupPrincipal"); + propertiesRealmGBean.setAttribute("defaultPrincipal", "metro=org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"); + + start(securityServiceGBean); + start(loginServiceGBean); + start(serverInfoGBean); + start(propertiesLMGBean); + start(propertiesRealmGBean); + + } + + protected void tearDownSecurity() throws Exception { + stop(propertiesRealmName); + stop(propertiesLMName); + stop(serverInfoName); + stop(loginServiceName); + stop(securityServiceName); + } + + private void start(GBeanData gbeanData) throws Exception { + kernel.loadGBean(gbeanData, cl); + kernel.startGBean(gbeanData.getName()); + if (((Integer)kernel.getAttribute(gbeanData.getName(), "state")).intValue() != State.RUNNING_INDEX ) { + fail("gbean not started: " + gbeanData.getName()); + } + } + + private void stop(ObjectName name) throws Exception { + kernel.stopGBean(name); + kernel.unloadGBean(name); + } + + protected void setUp() throws Exception { + 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); + + tmName = NameFactory.getComponentName(null, null, "TransactionManager", NameFactory.JTA_RESOURCE, moduleContext); + tcmName = NameFactory.getComponentName(null, null, "TransactionContextManager", NameFactory.JTA_RESOURCE, moduleContext); + ctcName = new ObjectName("geronimo.test:role=ConnectionTrackingCoordinator"); + + kernel = new Kernel("test.kernel"); + kernel.boot(); + container = new GBeanData(containerName, JettyContainerImpl.GBEAN_INFO); + + connector = new GBeanData(connectorName, HTTPConnector.GBEAN_INFO); + connector.setAttribute("port", new Integer(5678)); + connector.setReferencePattern("JettyContainer", containerName); + + start(container); + start(connector); + + tm = new GBeanData(tmName, GeronimoTransactionManager.GBEAN_INFO); + Set patterns = new HashSet(); + patterns.add(ObjectName.getInstance("geronimo.server:j2eeType=JCAManagedConnectionFactory,*")); + tm.setAttribute("defaultTransactionTimeoutSeconds", new Integer(10)); + tm.setReferencePatterns("ResourceManagers", patterns); + start(tm); + tcm = new GBeanData(tcmName, TransactionContextManager.GBEAN_INFO); + tcm.setReferencePattern("TransactionManager", tmName); + start(tcm); + ctc = new GBeanData(ctcName, ConnectionTrackingCoordinator.GBEAN_INFO); + start(ctc); + } + + protected void tearDown() throws Exception { + stop(ctcName); + stop(tmName); + stop(connectorName); + stop(containerName); + kernel.shutdown(); + } +} Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ApplicationTest.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ApplicationTest.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ApplicationTest.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ApplicationTest.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ApplicationTest.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ApplicationTest.java Wed Dec 1 23:22:43 2004 @@ -20,60 +20,17 @@ import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; -import java.net.URI; import java.net.URL; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import javax.management.ObjectName; - -import junit.framework.TestCase; -import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator; -import org.apache.geronimo.gbean.jmx.GBeanMBean; -import org.apache.geronimo.jetty.connector.HTTPConnector; -import org.apache.geronimo.kernel.Kernel; -import org.apache.geronimo.transaction.GeronimoTransactionManager; -import org.apache.geronimo.transaction.OnlineUserTransaction; -import org.apache.geronimo.transaction.context.TransactionContextManager; /** * @version $Rev$ $Date$ */ -public class ApplicationTest extends TestCase { - private Kernel kernel; - private GBeanMBean container; - private ObjectName containerName; - private Set containerPatterns; - private ObjectName connectorName; - private GBeanMBean connector; - private ObjectName appName; - private ObjectName tmName; - private ObjectName tcaName; - private GBeanMBean tm; - private GBeanMBean ctc; - private ObjectName tcmName; - private GBeanMBean tcm; - - public void testDummy() throws Exception { - } +public class ApplicationTest extends AbstractWebModuleTest { public void testApplication() throws Exception { - GBeanMBean app = new GBeanMBean(JettyWebAppContext.GBEAN_INFO); - app.setAttribute("uri", URI.create("war1/")); - app.setAttribute("componentContext", null); - OnlineUserTransaction userTransaction = new OnlineUserTransaction(); - app.setAttribute("userTransaction", userTransaction); - app.setAttribute("webClassPath", new URI[0]); - app.setAttribute("contextPriorityClassLoader", Boolean.FALSE); - app.setAttribute("configurationBaseUrl", Thread.currentThread().getContextClassLoader().getResource("deployables/")); - app.setReferencePattern("TransactionContextManager", tcmName); - app.setReferencePattern("TrackedConnectionAssociator", tcaName); - app.setReferencePatterns("JettyContainer", containerPatterns); - - app.setAttribute("contextPath", "/test"); - - start(appName, app); + setUpInsecureAppContext(); + setUpStaticContentServlet(); HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost:5678/test/hello.txt").openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); @@ -82,55 +39,4 @@ connection.disconnect(); } - private void start(ObjectName name, GBeanMBean instance) throws Exception { - kernel.loadGBean(name, instance); - kernel.startGBean(name); - } - - private void stop(ObjectName name) throws Exception { - kernel.stopGBean(name); - kernel.unloadGBean(name); - } - - protected void setUp() throws Exception { - containerName = new ObjectName("geronimo.jetty:role=Container"); - containerPatterns = Collections.singleton(containerName); - connectorName = new ObjectName("geronimo.jetty:role=Connector"); - appName = new ObjectName("geronimo.jetty:app=test"); - - tmName = new ObjectName("geronimo.test:role=TransactionManager"); - tcmName = new ObjectName("geronimo.test:role=TransactionContextManager"); - tcaName = new ObjectName("geronimo.test:role=ConnectionTrackingCoordinator"); - - kernel = new Kernel("test.kernel", "test"); - kernel.boot(); - container = new GBeanMBean(JettyContainerImpl.GBEAN_INFO); - - connector = new GBeanMBean(HTTPConnector.GBEAN_INFO); - connector.setAttribute("port", new Integer(5678)); - connector.setReferencePatterns("JettyContainer", containerPatterns); - - start(containerName, container); - start(connectorName, connector); - - tm = new GBeanMBean(GeronimoTransactionManager.GBEAN_INFO); - Set patterns = new HashSet(); - patterns.add(ObjectName.getInstance("geronimo.server:j2eeType=JCAManagedConnectionFactory,*")); - tm.setAttribute("defaultTransactionTimeoutSeconds", new Integer(10)); - tm.setReferencePatterns("ResourceManagers", patterns); - start(tmName, tm); - tcm = new GBeanMBean(TransactionContextManager.GBEAN_INFO); - tcm.setReferencePattern("TransactionManager", tmName); - start(tcmName, tcm); - ctc = new GBeanMBean(ConnectionTrackingCoordinator.GBEAN_INFO); - start(tcaName, ctc); - } - - protected void tearDown() throws Exception { - stop(tcaName); - stop(tmName); - stop(connectorName); - stop(containerName); - kernel.shutdown(); - } } Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/BaseSecurityTest.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/BaseSecurityTest.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/BaseSecurityTest.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/BaseSecurityTest.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/BaseSecurityTest.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/BaseSecurityTest.java Wed Dec 1 23:22:43 2004 @@ -46,8 +46,6 @@ protected GBeanMBean connectorGBean; protected GBeanMBean serverInfoGBean; protected ObjectName serverInfoName; - protected GBeanMBean jaasRealmGBean; - protected ObjectName jaasRealmName; protected GBeanMBean propertiesRealmGBean; protected ObjectName propertiesRealmName; protected GBeanMBean propertiesLMGBean; @@ -100,12 +98,6 @@ connectorGBean.setAttribute("port", new Integer(5678)); connectorGBean.setReferencePatterns("JettyContainer", containerPatterns); - jaasRealmGBean = new GBeanMBean("org.apache.geronimo.jetty.JAASJettyRealm"); - jaasRealmName = new ObjectName("geronimo.jetty:role=JaasRealm"); - jaasRealmGBean.setReferencePatterns("JettyContainer", containerPatterns); - jaasRealmGBean.setAttribute("name", "Test JAAS Realm"); - jaasRealmGBean.setAttribute("loginModuleName", "jaasTest"); - securityServiceGBean = new GBeanMBean("org.apache.geronimo.security.SecurityServiceImpl"); securityServiceName = new ObjectName("geronimo.security:type=SecurityServiceImpl"); securityServiceGBean.setReferencePatterns("Realms", Collections.singleton(new ObjectName("geronimo.security:type=SecurityRealm,*"))); @@ -145,7 +137,6 @@ start(containerName, container); start(securityServiceName, securityServiceGBean); start(loginServiceName, loginServiceGBean); - start(jaasRealmName, jaasRealmGBean); start(connectorName, connectorGBean); tm = new GBeanMBean(GeronimoTransactionManager.GBEAN_INFO); @@ -166,7 +157,6 @@ stop(tcmName); stop(tmName); stop(connectorName); - stop(jaasRealmName); stop(loginServiceName); stop(securityServiceName); stop(containerName); Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/ClassLoaderTest.java Wed Dec 1 23:22:43 2004 @@ -18,6 +18,9 @@ package org.apache.geronimo.jetty; import java.net.URL; +import java.net.MalformedURLException; +import java.io.File; + import junit.framework.TestCase; /** @@ -31,8 +34,9 @@ JettyClassLoader cl; URL[] urls; - public void setUp() { - URL url = getClass().getClassLoader().getResource("deployables/cltest/"); + public void setUp() throws MalformedURLException { + URL url = new File("src/test-resources/deployables/cltest/").toURL(); +// URL url = getClass().getClassLoader().getResource("deployables/cltest/"); System.err.println("URL: "+url); urls = new URL[]{url}; } Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/SecurityTest.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/SecurityTest.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/SecurityTest.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/SecurityTest.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/SecurityTest.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/SecurityTest.java Wed Dec 1 23:22:43 2004 @@ -21,10 +21,16 @@ import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; -import java.net.URI; import java.net.URL; +import java.util.Map; +import java.util.Set; +import java.util.HashMap; +import java.util.HashSet; -import org.apache.geronimo.gbean.jmx.GBeanMBean; +import javax.security.jacc.WebResourcePermission; +import javax.security.jacc.WebUserDataPermission; + +import org.apache.geronimo.kernel.jmx.MBeanProxyFactory; import org.apache.geronimo.security.SecurityService; import org.apache.geronimo.security.deploy.AutoMapAssistant; import org.apache.geronimo.security.deploy.DefaultPrincipal; @@ -32,7 +38,6 @@ import org.apache.geronimo.security.deploy.Realm; import org.apache.geronimo.security.deploy.Role; import org.apache.geronimo.security.deploy.Security; -import org.apache.geronimo.transaction.OnlineUserTransaction; /** @@ -40,7 +45,7 @@ * * @version $Rev$ $Date$ */ -public class SecurityTest extends BaseSecurityTest { +public class SecurityTest extends AbstractWebModuleTest { /** * Test the explicit map feature. Only Alan should be able to log in. @@ -72,7 +77,12 @@ securityConfig.getRoleMappings().put(role.getRoleName(), role); - startWebApp(securityConfig); + Set uncheckedPermissions = new HashSet(); + Set excludedPermissions = new HashSet(); + Map rolePermissions = new HashMap(); + Set securityRoles = new HashSet(); + + startWebApp(securityConfig, uncheckedPermissions, excludedPermissions, rolePermissions, securityRoles); HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); connection.setInstanceFollowRedirects(false); @@ -155,79 +165,96 @@ securityConfig.getRoleNames().add("content-administrator"); securityConfig.getRoleNames().add("auto-administrator"); - SecurityService securityService = null; + SecurityService securityService = (SecurityService) kernel.getProxyManager().createProxy(securityServiceName, SecurityService.class); try { - securityService = (SecurityService) kernel.getProxyManager().createProxy(securityServiceName, SecurityService.class); securityConfig.autoGenerate(securityService); + } finally { + kernel.getProxyManager().destroyProxy(securityService); + } - startWebApp(securityConfig); + String actions = "GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE"; + Set uncheckedPermissions = new HashSet(); + uncheckedPermissions.add(new WebUserDataPermission("/protected/*", actions)); + uncheckedPermissions.add(new WebResourcePermission("/:/protected/*:/auth/logon.html", actions)); + uncheckedPermissions.add(new WebUserDataPermission("/:/protected/*:/auth/logon.html", actions)); + Set excludedPermissions = new HashSet(); + excludedPermissions.add(new WebResourcePermission("/auth/login.html", actions)); + excludedPermissions.add(new WebUserDataPermission("/auth/login.html", actions)); + Map rolePermissions = new HashMap(); + WebResourcePermission permission = new WebResourcePermission("/protected/*", actions); + Set permissionSet = new HashSet(); + permissionSet.add(permission); + rolePermissions.put("content-administrator", permissionSet); + rolePermissions.put("auto-administrator", permissionSet); + Set securityRoles = new HashSet(); + securityRoles.add("content-administrator"); + securityRoles.add("auto-administrator"); - HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); + startWebApp(securityConfig, uncheckedPermissions, excludedPermissions, rolePermissions, securityRoles); - String cookie = connection.getHeaderField("Set-Cookie"); - cookie = cookie.substring(0, cookie.lastIndexOf(';')); - String location = connection.getHeaderField("Location"); + HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); - connection = (HttpURLConnection) new URL(location).openConnection(); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + String cookie = connection.getHeaderField("Set-Cookie"); + cookie = cookie.substring(0, cookie.lastIndexOf(';')); + String location = connection.getHeaderField("Location"); - location = location.substring(0, location.lastIndexOf('/')) + "/j_security_check?j_username=izumi&j_password=violin"; + connection = (HttpURLConnection) new URL(location).openConnection(); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); - connection = (HttpURLConnection) new URL(location).openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Cookie", cookie); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); + location = location.substring(0, location.lastIndexOf('/')) + "/j_security_check?j_username=izumi&j_password=violin"; - connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); - connection.setRequestProperty("Cookie", cookie); - connection.setInstanceFollowRedirects(false); - BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + connection = (HttpURLConnection) new URL(location).openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Cookie", cookie); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); - assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); - assertEquals("Hello World", reader.readLine()); - connection.disconnect(); + connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); + connection.setRequestProperty("Cookie", cookie); + connection.setInstanceFollowRedirects(false); + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + assertEquals("Hello World", reader.readLine()); + connection.disconnect(); - connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); - cookie = connection.getHeaderField("Set-Cookie"); - cookie = cookie.substring(0, cookie.lastIndexOf(';')); - location = connection.getHeaderField("Location"); + connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); + + cookie = connection.getHeaderField("Set-Cookie"); + cookie = cookie.substring(0, cookie.lastIndexOf(';')); + location = connection.getHeaderField("Location"); - connection = (HttpURLConnection) new URL(location).openConnection(); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + connection = (HttpURLConnection) new URL(location).openConnection(); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + + location = location.substring(0, location.lastIndexOf('/')) + "/j_security_check?j_username=alan&j_password=starcraft"; - location = location.substring(0, location.lastIndexOf('/')) + "/j_security_check?j_username=alan&j_password=starcraft"; + connection = (HttpURLConnection) new URL(location).openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Cookie", cookie); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); - connection = (HttpURLConnection) new URL(location).openConnection(); - connection.setRequestMethod("POST"); + try { + connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); connection.setRequestProperty("Cookie", cookie); connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); + reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - try { - connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); - connection.setRequestProperty("Cookie", cookie); - connection.setInstanceFollowRedirects(false); - reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - - fail("Should throw an IOException for HTTP 403 response"); - } catch (IOException e) { - } - - assertEquals(HttpURLConnection.HTTP_FORBIDDEN, connection.getResponseCode()); - connection.disconnect(); - stopWebApp(); - } finally { - kernel.getProxyManager().destroyProxy(securityService); + fail("Should throw an IOException for HTTP 403 response"); + } catch (IOException e) { } + + assertEquals(HttpURLConnection.HTTP_FORBIDDEN, connection.getResponseCode()); + connection.disconnect(); + stopWebApp(); } /** @@ -247,123 +274,142 @@ securityConfig.getRoleNames().add("content-administrator"); securityConfig.getRoleNames().add("auto-administrator"); - SecurityService securityService = null; + SecurityService securityService = (SecurityService) kernel.getProxyManager().createProxy(securityServiceName, SecurityService.class); try { - securityService = (SecurityService) kernel.getProxyManager().createProxy(securityServiceName, SecurityService.class); securityConfig.autoGenerate(securityService); + } finally { + kernel.getProxyManager().destroyProxy(securityService); + } - DefaultPrincipal defaultPrincipal = new DefaultPrincipal(); - defaultPrincipal.setRealmName("demo-properties-realm"); - Principal principal = new Principal(); - principal.setClassName("org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"); - principal.setPrincipalName("izumi"); - defaultPrincipal.setPrincipal(principal); - - securityConfig.setDefaultPrincipal(defaultPrincipal); - - Role role = new Role(); - role.setRoleName("content-administrator"); - principal = new Principal(); - principal.setClassName("org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"); - principal.setPrincipalName("it"); - Realm realm = new Realm(); - realm.setRealmName("demo-properties-realm"); - realm.getPrincipals().add(principal); - role.getRealms().put(realm.getRealmName(), realm); + DefaultPrincipal defaultPrincipal = new DefaultPrincipal(); + defaultPrincipal.setRealmName("demo-properties-realm"); + Principal principal = new Principal(); + principal.setClassName("org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal"); + principal.setPrincipalName("izumi"); + defaultPrincipal.setPrincipal(principal); - securityConfig.append(role); + securityConfig.setDefaultPrincipal(defaultPrincipal); - startWebApp(securityConfig); + Role role = new Role(); + role.setRoleName("content-administrator"); + principal = new Principal(); + principal.setClassName("org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal"); + principal.setPrincipalName("it"); + Realm realm = new Realm(); + realm.setRealmName("demo-properties-realm"); + realm.getPrincipals().add(principal); + role.getRealms().put(realm.getRealmName(), realm); - HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); + securityConfig.append(role); - String cookie = connection.getHeaderField("Set-Cookie"); - cookie = cookie.substring(0, cookie.lastIndexOf(';')); - String location = connection.getHeaderField("Location"); + Set uncheckedPermissions = new HashSet(); + Set excludedPermissions = new HashSet(); + Map rolePermissions = new HashMap(); + Set securityRoles = new HashSet(); - connection = (HttpURLConnection) new URL(location).openConnection(); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + startWebApp(securityConfig, uncheckedPermissions, excludedPermissions, rolePermissions, securityRoles); - location = location.substring(0, location.lastIndexOf('/')) + "/j_security_check?j_username=izumi&j_password=violin"; + HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); - connection = (HttpURLConnection) new URL(location).openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Cookie", cookie); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); + String cookie = connection.getHeaderField("Set-Cookie"); + cookie = cookie.substring(0, cookie.lastIndexOf(';')); + String location = connection.getHeaderField("Location"); - connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); - connection.setRequestProperty("Cookie", cookie); - connection.setInstanceFollowRedirects(false); - BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + connection = (HttpURLConnection) new URL(location).openConnection(); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); - assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); - assertEquals("Hello World", reader.readLine()); - connection.disconnect(); + location = location.substring(0, location.lastIndexOf('/')) + "/j_security_check?j_username=izumi&j_password=violin"; + connection = (HttpURLConnection) new URL(location).openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Cookie", cookie); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); - connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); + connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); + connection.setRequestProperty("Cookie", cookie); + connection.setInstanceFollowRedirects(false); + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - cookie = connection.getHeaderField("Set-Cookie"); - cookie = cookie.substring(0, cookie.lastIndexOf(';')); - location = connection.getHeaderField("Location"); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + assertEquals("Hello World", reader.readLine()); + connection.disconnect(); - connection = (HttpURLConnection) new URL(location).openConnection(); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); - location = location.substring(0, location.lastIndexOf('/')) + "/j_security_check?j_username=alan&j_password=starcraft"; + connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); - connection = (HttpURLConnection) new URL(location).openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Cookie", cookie); - connection.setInstanceFollowRedirects(false); - assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); + cookie = connection.getHeaderField("Set-Cookie"); + cookie = cookie.substring(0, cookie.lastIndexOf(';')); + location = connection.getHeaderField("Location"); - connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); - connection.setRequestProperty("Cookie", cookie); - connection.setInstanceFollowRedirects(false); - reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + connection = (HttpURLConnection) new URL(location).openConnection(); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); - assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); - assertEquals("Hello World", reader.readLine()); - connection.disconnect(); + location = location.substring(0, location.lastIndexOf('/')) + "/j_security_check?j_username=alan&j_password=starcraft"; - stopWebApp(); - } finally { - kernel.getProxyManager().destroyProxy(securityService); - } - } + connection = (HttpURLConnection) new URL(location).openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Cookie", cookie); + connection.setInstanceFollowRedirects(false); + assertEquals(HttpURLConnection.HTTP_MOVED_TEMP, connection.getResponseCode()); - protected void startWebApp(Security securityConfig) throws Exception { - GBeanMBean app = new GBeanMBean(JettyWebAppJACCContext.GBEAN_INFO); + connection = (HttpURLConnection) new URL("http://localhost:5678/test/protected/hello.txt").openConnection(); + connection.setRequestProperty("Cookie", cookie); + connection.setInstanceFollowRedirects(false); + reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - app.setAttribute("uri", URI.create("war3/")); - app.setAttribute("componentContext", null); - OnlineUserTransaction userTransaction = new OnlineUserTransaction(); - app.setAttribute("userTransaction", userTransaction); - app.setAttribute("webClassPath", new URI[0]); - app.setAttribute("contextPriorityClassLoader", Boolean.FALSE); - app.setAttribute("configurationBaseUrl", Thread.currentThread().getContextClassLoader().getResource("deployables/")); - app.setAttribute("securityConfig", securityConfig); - app.setReferencePattern("SecurityService", securityServiceName); - app.setAttribute("policyContextID", "TEST"); - - app.setAttribute("contextPath", "/test"); - - app.setReferencePattern("TransactionContextManager", tcmName); - app.setReferencePattern("TrackedConnectionAssociator", tcaName); - app.setReferencePatterns("JettyContainer", containerPatterns); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + assertEquals("Hello World", reader.readLine()); + connection.disconnect(); - start(appName, app); + stopWebApp(); + } + + protected void startWebApp(Security securityConfig, Set uncheckedPermissions, Set excludedPermissions, Map rolePermissions, Set securityRoles) throws Exception { + setUpSecureAppContext(securityConfig, uncheckedPermissions, excludedPermissions, rolePermissions, securityRoles); + setUpStaticContentServlet(); +// GBeanMBean app = new GBeanMBean(JettyWebAppJACCContext.GBEAN_INFO); +// +// app.setAttribute("userRealmName", "Test JAAS Realm"); +// app.setAttribute("securityRealmName", "jaasTest"); +// app.setAttribute("uri", URI.create("war3/")); +// app.setAttribute("componentContext", null); +// OnlineUserTransaction userTransaction = new OnlineUserTransaction(); +// app.setAttribute("userTransaction", userTransaction); +// app.setAttribute("webClassPath", new URI[0]); +// app.setAttribute("contextPriorityClassLoader", Boolean.FALSE); +// app.setAttribute("configurationBaseUrl", Thread.currentThread().getContextClassLoader().getResource("deployables/")); +// app.setAttribute("securityConfig", securityConfig); +// app.setReferencePattern("SecurityService", securityServiceName); +// app.setAttribute("policyContextID", "TEST"); +// +// app.setAttribute("contextPath", "/test"); +// +// app.setReferencePattern("TransactionContextManager", tcmName); +// app.setReferencePattern("TrackedConnectionAssociator", tcaName); +// app.setReferencePatterns("JettyContainer", containerPatterns); +// +// start(appName, app); } protected void stopWebApp() throws Exception { - stop(appName); +// stop(appName); } + + protected void setUp() throws Exception { + super.setUp(); + setUpSecurity(); + } + + protected void tearDown() throws Exception { + tearDownSecurity(); + super.tearDown(); + } + } Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/GBeanResourceEnvironmentBuilder.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/GBeanResourceEnvironmentBuilder.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/GBeanResourceEnvironmentBuilder.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/GBeanResourceEnvironmentBuilder.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/GBeanResourceEnvironmentBuilder.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/naming-builder/src/java/org/apache/geronimo/naming/deployment/GBeanResourceEnvironmentBuilder.java Wed Dec 1 23:22:43 2004 @@ -2,60 +2,31 @@ import java.util.Set; -import javax.management.ReflectionException; -import javax.management.AttributeNotFoundException; -import javax.management.Attribute; - -import org.apache.geronimo.gbean.jmx.GBeanMBean; +import org.apache.geronimo.gbean.GBeanData; /** */ public class GBeanResourceEnvironmentBuilder implements ResourceEnvironmentBuilder { - private final GBeanMBean gbean; + private final GBeanData gbean; - public GBeanResourceEnvironmentBuilder(GBeanMBean gbean) { + public GBeanResourceEnvironmentBuilder(GBeanData gbean) { this.gbean = gbean; } public Set getUnshareableResources() { - try { - return (Set)gbean.getAttribute("unshareableResources"); - } catch (ReflectionException e) { - throw (IllegalStateException)new IllegalStateException().initCause(e); - } catch (AttributeNotFoundException e) { - throw (IllegalStateException)new IllegalStateException().initCause(e); - } + return (Set) gbean.getAttribute("unshareableResources"); } public void setUnshareableResources(Set unshareableResources) { - try { - gbean.setAttribute(new Attribute("unshareableResources", unshareableResources)); - } catch (ReflectionException e) { - throw (IllegalStateException)new IllegalStateException().initCause(e); - } catch (AttributeNotFoundException e) { - throw (IllegalStateException)new IllegalStateException().initCause(e); - } - + gbean.setAttribute("unshareableResources", unshareableResources); } public Set getApplicationManagedSecurityResources() { - try { - return (Set)gbean.getAttribute("applicationManagedSecurityResources"); - } catch (ReflectionException e) { - throw (IllegalStateException)new IllegalStateException().initCause(e); - } catch (AttributeNotFoundException e) { - throw (IllegalStateException)new IllegalStateException().initCause(e); - } + return (Set) gbean.getAttribute("applicationManagedSecurityResources"); } public void setApplicationManagedSecurityResources(Set applicationManagedSecurityResources) { - try { - gbean.setAttribute(new Attribute("applicationManagedSecurityResources", applicationManagedSecurityResources)); - } catch (ReflectionException e) { - throw (IllegalStateException)new IllegalStateException().initCause(e); - } catch (AttributeNotFoundException e) { - throw (IllegalStateException)new IllegalStateException().initCause(e); - } + gbean.setAttribute("applicationManagedSecurityResources", applicationManagedSecurityResources); } } Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/ContextManager.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/ContextManager.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/ContextManager.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/ContextManager.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/ContextManager.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/ContextManager.java Wed Dec 1 23:22:43 2004 @@ -215,7 +215,7 @@ } else if (!subject.getPrincipals().isEmpty()) { context.principal = (Principal) subject.getPrincipals().iterator().next(); } - + //there are several RealmPrincipals. Why pick the first out of a map? Long id = new Long(nextSubjectId++); context.id = new SubjectId(id, hash(id)); Modified: geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java Url: http://svn.apache.org/viewcvs/geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java?view=diff&rev=109464&p1=geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java&r1=109463&p2=geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java&r2=109464 ============================================================================== --- geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java (original) +++ geronimo/branches/djencks/jetty-deployer1/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceImpl.java Wed Dec 1 23:22:43 2004 @@ -17,29 +17,27 @@ package org.apache.geronimo.security; +import java.security.Policy; import java.util.Collection; import java.util.Collections; import java.util.Iterator; -import java.security.Policy; -import javax.management.ObjectName; -import javax.security.jacc.PolicyContextException; 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.common.GeronimoSecurityException; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; import org.apache.geronimo.gbean.GBeanLifecycle; import org.apache.geronimo.gbean.WaitingException; -import org.apache.geronimo.kernel.jmx.JMXUtil; -import org.apache.geronimo.common.GeronimoSecurityException; +import org.apache.geronimo.security.jacc.GeronimoPolicy; import org.apache.geronimo.security.jacc.ModuleConfiguration; 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.jacc.GeronimoPolicy; -import org.apache.geronimo.security.realm.SecurityRealm; import org.apache.geronimo.security.realm.AutoMapAssistant; +import org.apache.geronimo.security.realm.SecurityRealm; import org.apache.geronimo.security.util.ConfigurationUtil; @@ -49,10 +47,6 @@ * @version $Rev$ $Date$ */ public class SecurityServiceImpl implements SecurityService, GBeanLifecycle { - /** - * The JMX name of the SecurityServiceImpl. - */ - public static final ObjectName SECURITY = JMXUtil.getObjectName("geronimo.security:type=SecurityServiceImpl"); private final Log log = LogFactory.getLog(SecurityService.class); @@ -66,12 +60,6 @@ * Permissions that protect access to sensitive security information */ public static final GeronimoSecurityPermission CONFIGURE = new GeronimoSecurityPermission("configure"); - - //deprecated, for geronimo mbean only - public SecurityServiceImpl() { - this(null); - } - public SecurityServiceImpl(String policyConfigurationFactory) { /**