0

I have my custom tomcat Valve extending FormAuthenticator, and same is defined in context.xml of each webapp. I need to read some property files in 'initInternal' of Valve, based on webapp name. i.e. for each webapp different property file. Since Valve is common, I need a way to find out the context in which my Valve is loaded. Is there any way to get the context in Valve class.

I tried to set system property in 'ServletContextListener' but Valve class is loaded before the ServletContextListener is initialised.

Here is how my context.xml look.

<Context className="org.apache.catalina.core.StandardContext" debug="0" allowLinking="true" docBase="auth" path="/auth" privileged="true" reloadable="false">
  <Realm className="org.apache.catalina.realm.LockOutRealm" failureCount="5" lockOutTime="300" >
  <Realm className="com.foo.realm.FooRealm" /></Realm>
  <Valve className="com.foo.valves.FooRESTValve" />
</Context>

Only 'docbase' and 'path' is different for each webapp.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
Brinal
  • 172
  • 2
  • 18

1 Answers1

1

You can pass parameters to your valve in the context.xml:

 <Valve className="com.foo.valves.FooRESTValve" myParam="bar" />

Tomcat will use the parameter name to try and set it's value on the valve implementation by calling it's JavaBean setter:

public class FooRESTValve extends ValveBase {

    ...

    private String myParam;

    ...

    public void setMyParam(String myParam) {
        this.myParam = myParam;
    }

    ...


}

You could either configure all your properties like this, or just provide the name or path for your properties file.

Steve C
  • 18,876
  • 5
  • 34
  • 37