java - 获取tomcat valve类中的webapp名称

标签 java tomcat forms-authentication tomcat-valve

我有我的自定义 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/

相关文章:

java - 全局 channel 配置(租户/横幅/ Logo )

java - 在运行时禁用/忽略事务拦截器

java - tomcat 8 中 java.awt.Rectangle 的 NoClassDefFoundError

amazon-web-services - 如何检测 aws 上 tomcat 应用程序中的机器人流量

asp.net - azure 中多个 Web 服务器上的用户身份验证

ASP.NET 表单例份验证和持久身份验证 Cookie 安全

java - 无法找到或加载主类 com.johnathanmarksmith.gradle.HelloWorld

java - 通过正则表达式查找没有外部 `{}` 的 `{}` 部分

tomcat - 为什么 org.apache.catalina.LifecycleException : Failed to start component

.net - FormsAuthenticationModule 是否检测是否……?