我有我的自定义 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' 是不同的。
最佳答案
您可以在 context.xml 中将参数传递给您的阀门:
<Valve className="com.foo.valves.FooRESTValve" myParam="bar" />
Tomcat 将使用参数名称尝试通过调用它的 JavaBean setter 来设置它在 valve 实现上的值:
public class FooRESTValve extends ValveBase {
...
private String myParam;
...
public void setMyParam(String myParam) {
this.myParam = myParam;
}
...
}
您可以像这样配置所有属性,或者只提供属性文件的名称或路径。
关于java - 获取tomcat valve类中的webapp名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57661012/