0

我有我的自定义 tomcat Valve 扩展 FormAuthenticator,并且在每个 webapp 的 context.xml 中定义了相同的内容。我需要根据 webapp 名称读取 Valve 的“initInternal”中的一些属性文件。即对于每个 webapp 不同的属性文件。由于 Valve 很常见,我需要一种方法来找出加载 Valve 的上下文。有什么方法可以在 Valve 类中获取上下文。

我试图在“ServletContextListener”中设置系统属性,但在初始化 ServletContextListener 之前加载了 Valve 类。

这是我的 context.xml 的外观。

<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>

每个 webapp 只有 'docbase' 和 'path' 不同。

4

1 回答 1

1

您可以在 context.xml 中将参数传递给您的阀门:

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

Tomcat 将使用参数名称通过调用它的 JavaBean 设置器来尝试在阀门实现上设置它的值:

public class FooRESTValve extends ValveBase {

    ...

    private String myParam;

    ...

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

    ...


}

您可以像这样配置所有属性,也可以只提供属性文件的名称或路径。

于 2019-08-27T09:32:59.180 回答