You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jg...@apache.org on 2005/05/03 05:41:19 UTC
svn commit: r167852 - in
/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat:
BaseGBean.java EngineGBean.java GeronimoStandardContext.java HostGBean.java
TomcatContainer.java TomcatContext.java TomcatGeronimoEmbedded.java
TomcatWebAppContext.java ValveGBean.java util/SecurityHolder.java
Author: jgenender
Date: Mon May 2 20:41:18 2005
New Revision: 167852
URL: http://svn.apache.org/viewcvs?rev=167852&view=rev
Log:
Added Valves that may be added to the Engine, Host or Context
Added:
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ValveGBean.java
Modified:
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/BaseGBean.java
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/HostGBean.java
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContainer.java
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContext.java
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java
geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/util/SecurityHolder.java
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/BaseGBean.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/BaseGBean.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/BaseGBean.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/BaseGBean.java Mon May 2 20:41:18 2005
@@ -37,4 +37,5 @@
}
}
+
}
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/EngineGBean.java Mon May 2 20:41:18 2005
@@ -16,10 +16,13 @@
*/
package org.apache.geronimo.tomcat;
+import java.util.ArrayList;
import java.util.Map;
import org.apache.catalina.Engine;
import org.apache.catalina.Realm;
+import org.apache.catalina.Valve;
+import org.apache.catalina.core.StandardEngine;
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
@@ -29,7 +32,10 @@
private final Engine engine;
- public EngineGBean(String className, Map initParams, ObjectRetriever realmGBean) throws Exception {
+ public EngineGBean(String className,
+ Map initParams,
+ ObjectRetriever realmGBean,
+ ValveGBean tomcatValveChain) throws Exception {
super(); // TODO: make it an attribute
if (className == null){
@@ -44,6 +50,19 @@
if (realmGBean != null){
engine.setRealm((Realm)realmGBean.getInternalObject());
}
+
+ //Add the valve list
+ if (engine instanceof StandardEngine){
+ if (tomcatValveChain != null){
+ ArrayList chain = new ArrayList();
+ ValveGBean valveGBean = tomcatValveChain;
+ while(valveGBean != null){
+ ((StandardEngine)engine).addValve((Valve)valveGBean.getInternalObject());
+ valveGBean = valveGBean.getNextValve();
+ }
+ }
+ }
+
}
public Object getInternalObject() {
@@ -66,8 +85,9 @@
infoFactory.addAttribute("className", String.class, true);
infoFactory.addAttribute("initParams", Map.class, true);
infoFactory.addReference("realmGBean", ObjectRetriever.class, NameFactory.GERONIMO_SERVICE);
+ infoFactory.addReference("TomcatValveChain", ValveGBean.class, ValveGBean.J2EE_TYPE);
infoFactory.addOperation("getInternalObject");
- infoFactory.setConstructor(new String[] { "className", "initParams", "realmGBean" });
+ infoFactory.setConstructor(new String[] { "className", "initParams", "realmGBean", "TomcatValveChain" });
GBEAN_INFO = infoFactory.getBeanInfo();
}
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/GeronimoStandardContext.java Mon May 2 20:41:18 2005
@@ -16,6 +16,7 @@
*/
package org.apache.geronimo.tomcat;
+import java.util.List;
import java.util.Iterator;
import java.util.Map;
@@ -24,6 +25,7 @@
import javax.security.jacc.PolicyContext;
import org.apache.catalina.LifecycleException;
+import org.apache.catalina.Valve;
import org.apache.catalina.core.StandardContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -52,7 +54,7 @@
public void setContextProperties(TomcatContext ctx){
- // create ReadOnlyContext
+ // Create ReadOnlyContext
javax.naming.Context enc = null;
Map componentContext = ctx.getComponentContext();
try {
@@ -118,6 +120,17 @@
addValve(policyValve);
}
}
+
+ // Add User Defined Valves
+ List valveChain = ctx.getValveChain();
+ if (valveChain != null){
+ Iterator iterator = valveChain.iterator();
+ while(iterator.hasNext()){
+ addValve((Valve)iterator.next());
+ }
+ }
+
+
}
public synchronized void start() throws LifecycleException {
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/HostGBean.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/HostGBean.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/HostGBean.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/HostGBean.java Mon May 2 20:41:18 2005
@@ -16,13 +16,15 @@
*/
package org.apache.geronimo.tomcat;
+import java.util.ArrayList;
import java.util.Map;
-import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.Realm;
-import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.Valve;
+import org.apache.catalina.core.StandardEngine;
+import org.apache.catalina.core.StandardHost;
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
@@ -32,7 +34,11 @@
private final Host host;
- public HostGBean(String className, Map initParams, ObjectRetriever engineGBean, ObjectRetriever realmGBean) throws Exception {
+ public HostGBean(String className,
+ Map initParams,
+ ObjectRetriever engineGBean,
+ ObjectRetriever realmGBean,
+ ValveGBean tomcatValveChain) throws Exception {
super(); // TODO: make it an attribute
//Validate
@@ -56,6 +62,18 @@
host.setRealm((Realm)realmGBean.getInternalObject());
else
host.setRealm(engine.getRealm());
+
+ //Add the valve list
+ if (host instanceof StandardHost){
+ if (tomcatValveChain != null){
+ ArrayList chain = new ArrayList();
+ ValveGBean valveGBean = tomcatValveChain;
+ while(valveGBean != null){
+ ((StandardHost)host).addValve((Valve)valveGBean.getInternalObject());
+ valveGBean = valveGBean.getNextValve();
+ }
+ }
+ }
//Add the host to the engine
engine.addChild(host);
@@ -83,8 +101,9 @@
infoFactory.addAttribute("initParams", Map.class, true);
infoFactory.addReference("engineGBean", ObjectRetriever.class, NameFactory.GERONIMO_SERVICE);
infoFactory.addReference("realmGBean", ObjectRetriever.class, NameFactory.GERONIMO_SERVICE);
+ infoFactory.addReference("TomcatValveChain", ValveGBean.class, ValveGBean.J2EE_TYPE);
infoFactory.addOperation("getInternalObject");
- infoFactory.setConstructor(new String[] { "className", "initParams", "engineGBean", "realmGBean" });
+ infoFactory.setConstructor(new String[] { "className", "initParams", "engineGBean", "realmGBean", "TomcatValveChain" });
GBEAN_INFO = infoFactory.getBeanInfo();
}
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContainer.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContainer.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContainer.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContainer.java Mon May 2 20:41:18 2005
@@ -16,6 +16,9 @@
*/
package org.apache.geronimo.tomcat;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.catalina.Container;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
@@ -173,7 +176,7 @@
// Set the context for the Tomcat implementation
ctx.setContext(anotherCtxObj);
-
+
// Have the context to set its properties if its a GeronimoStandardContext
if (anotherCtxObj instanceof GeronimoStandardContext)
((GeronimoStandardContext)anotherCtxObj).setContextProperties(ctx);
@@ -188,7 +191,11 @@
throw new IllegalArgumentException("Invalid virtual host '" + virtualServer +"'. Do you have a matchiing Host entry in the plan?");
}
- anotherCtxObj.setRealm(host.getRealm());
+ if (ctx.getRealm() != null)
+ anotherCtxObj.setRealm(ctx.getRealm());
+ else
+ anotherCtxObj.setRealm(host.getRealm());
+
host.addChild(anotherCtxObj);
}
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContext.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContext.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContext.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatContext.java Mon May 2 20:41:18 2005
@@ -16,10 +16,12 @@
*/
package org.apache.geronimo.tomcat;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.catalina.Context;
+import org.apache.catalina.Realm;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.tomcat.util.SecurityHolder;
import org.apache.geronimo.transaction.TrackedConnectionAssociator;
@@ -56,4 +58,7 @@
public Set getUnshareableResources();
+ public Realm getRealm();
+
+ public List getValveChain();
}
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoEmbedded.java Mon May 2 20:41:18 2005
@@ -16,6 +16,8 @@
*/
package org.apache.geronimo.tomcat;
+import java.io.File;
+
import org.apache.catalina.Context;
import org.apache.catalina.Lifecycle;
import org.apache.catalina.startup.ContextConfig;
@@ -37,7 +39,7 @@
context.setDocBase(docBase);
context.setPath(path);
-
+
ContextConfig config = new ContextConfig();
config.setCustomAuthenticators(authenticators);
((Lifecycle) context).addLifecycleListener(config);
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatWebAppContext.java Mon May 2 20:41:18 2005
@@ -19,13 +19,17 @@
import java.net.URI;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.management.ObjectName;
import org.apache.catalina.Context;
+import org.apache.catalina.Realm;
+import org.apache.catalina.Valve;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.geronimo.gbean.GBeanInfo;
@@ -65,6 +69,10 @@
private String docBase = null;
private String virtualServer = null;
+
+ private final Realm realm;
+
+ private final List valveChain;
private final Map componentContext;
@@ -104,6 +112,8 @@
TrackedConnectionAssociator trackedConnectionAssociator,
TomcatContainer container,
RoleDesignateSource roleDesignateSource,
+ ObjectRetriever tomcatRealm,
+ ValveGBean tomcatValveChain,
J2EEServer server,
J2EEApplication application,
Kernel kernel)
@@ -135,6 +145,28 @@
this.server = server;
this.application = application;
+ if (tomcatRealm != null){
+ realm = (Realm)tomcatRealm.getInternalObject();
+ if (!(realm instanceof Realm)){
+ throw new IllegalArgumentException("tomcatRealm must be an instance of org.apache.catalina.Realm.");
+ }
+ } else{
+ realm = null;
+ }
+
+ //Add the valve list
+ if (tomcatValveChain != null){
+ ArrayList chain = new ArrayList();
+ ValveGBean valveGBean = tomcatValveChain;
+ while(valveGBean != null){
+ chain.add((Valve)valveGBean.getInternalObject());
+ valveGBean = valveGBean.getNextValve();
+ }
+ valveChain = chain;
+ } else {
+ valveChain = null;
+ }
+
URI root = URI.create(configurationBaseUrl.toString());
webAppRoot = root.resolve(webAppRoot);
URL webAppRootURL = webAppRoot.toURL();
@@ -226,6 +258,14 @@
return unshareableResources;
}
+ public Realm getRealm() {
+ return realm;
+ }
+
+ public List getValveChain() {
+ return valveChain;
+ }
+
/**
* ObjectName must match this pattern: <p/>
* domain:j2eeType=WebModule,name=MyName,J2EEServer=MyServer,J2EEApplication=MyApplication
@@ -317,6 +357,8 @@
NameFactory.GERONIMO_SERVICE);
infoBuilder.addReference("RoleDesignateSource",
RoleDesignateSource.class, NameFactory.JACC_MANAGER);
+ infoBuilder.addReference("TomcatRealm", ObjectRetriever.class);
+ infoBuilder.addReference("TomcatValveChain", ValveGBean.class);
infoBuilder.addReference("J2EEServer", J2EEServer.class);
infoBuilder.addReference("J2EEApplication", J2EEApplication.class);
infoBuilder.addAttribute("kernel", Kernel.class, false);
@@ -339,6 +381,8 @@
"trackedConnectionAssociator",
"Container",
"RoleDesignateSource",
+ "TomcatRealm",
+ "TomcatValveChain",
"J2EEServer",
"J2EEApplication",
"kernel"
Added: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ValveGBean.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ValveGBean.java?rev=167852&view=auto
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ValveGBean.java (added)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/ValveGBean.java Mon May 2 20:41:18 2005
@@ -0,0 +1,100 @@
+/**
+*
+* 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.tomcat;
+
+import java.util.Map;
+
+import org.apache.catalina.Valve;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+
+public class ValveGBean extends BaseGBean implements GBeanLifecycle, ObjectRetriever {
+
+ public static final String J2EE_TYPE = "TomcatValve";
+
+ private final Valve valve;
+ private final ValveGBean nextValve;
+
+
+ public ValveGBean(){
+ valve = null;
+ nextValve = null;
+ }
+
+ public ValveGBean(String className, Map initParams, ValveGBean nextValve) throws Exception{
+
+ //Validate
+ if (className == null){
+ throw new IllegalArgumentException("className cannot be null.");
+ }
+
+ if (nextValve != null){
+ if (!(nextValve.getInternalObject() instanceof Valve)){
+ throw new IllegalArgumentException("className cannot be null.");
+ }
+
+ this.nextValve = nextValve;
+ } else {
+ this.nextValve = null;
+ }
+
+ //Create the Valve object
+ valve = (Valve)Class.forName(className).newInstance();
+
+ //Set the parameters
+ setParameters(valve, initParams);
+
+ }
+
+ public void doStart() throws Exception {
+ }
+
+ public void doStop() throws Exception {
+ }
+
+ public void doFail() {
+ }
+
+ public Object getInternalObject() {
+ return valve;
+ }
+
+ public ValveGBean getNextValve() {
+ return nextValve;
+ }
+
+ public static final GBeanInfo GBEAN_INFO;
+
+ static {
+ GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(ValveGBean.class, J2EE_TYPE);
+ infoFactory.addAttribute("className", String.class, true);
+ infoFactory.addAttribute("initParams", Map.class, true);
+ infoFactory.addReference("NextValve", ValveGBean.class, J2EE_TYPE);
+ infoFactory.addOperation("getInternalObject");
+ infoFactory.addOperation("getNextValve");
+ infoFactory.setConstructor(new String[] { "className", "initParams", "NextValve" });
+ GBEAN_INFO = infoFactory.getBeanInfo();
+ }
+
+ public static GBeanInfo getGBeanInfo() {
+ return GBEAN_INFO;
+ }
+
+}
Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/util/SecurityHolder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/util/SecurityHolder.java?rev=167852&r1=167851&r2=167852&view=diff
==============================================================================
--- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/util/SecurityHolder.java (original)
+++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/util/SecurityHolder.java Mon May 2 20:41:18 2005
@@ -16,11 +16,14 @@
**/
package org.apache.geronimo.tomcat.util;
+import java.io.Serializable;
import java.security.PermissionCollection;
import org.apache.geronimo.security.deploy.DefaultPrincipal;
-public class SecurityHolder
+public class SecurityHolder implements Serializable
{
+
+ private static final long serialVersionUID = 3761404231197734961L;
private String policyContextID;
private DefaultPrincipal defaultPrincipal;