tomcat6 - 自定义 Tomcat 阀门配置

标签 tomcat6 context.xml tomcat-valve

我写了一个自定义的 Tomcat 阀门。 (我使用的是 Tomcat 6.0.24 和 Java 1.6)这是我声明阀门的 XML 元素:

<Valve className="mypkg.MyValve"  foo="bar"/>

当我将此声明放入 server.xml 的 Host 元素中时。 Tomcat 使用值“bar”调用我的阀门上的 setFoo() 方法。这就是我想要发生的事情。

但是,当我在我的 webapp 的 META-INF/context.xml 中的 Context 元素中放置相同的声明时,Tomcat 会加载阀门并且阀门运行良好。但是 Tomcat 从不调用 setFoo() 方法来提供阀门所需的“bar”值。

我不明白为什么 Tomcat 正确配置了 server.xml 中声明的阀门,但 context.xml 中没有。

有谁知道当我的 webapp 的 META-INF/context.xml 中声明 Tomcat 时如何让它正确配置我的阀门?

谢谢,


这会导致我的阀门加载并由 Tomcat 正确配置:
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"
   xmlValidation="false" xmlNamespaceAware="false">

    <Valve className="mypkg.MyValve"  foo="bar"/>
</Host>

这会导致我的阀门加载,但 Tomcat 不会给它配置参数“bar”:
<Context privileged="true" >
    <Valve className="mypkg.MyValve"  foo="bar"/>
</Context>

最佳答案

这是我研究过的猜测。可能是您的 Valve绑定(bind)到 Host容器 ?

您的定制阀门是否直接继承 org.apache.catalina.valves.ValveBase?如果是这样,它应该工作。

您可以尝试打印出 getContainer() 从您的两个设置中查看您的 Valve 是否正确识别 Catalina containers (Engine, Host, Context) 中的哪一个每次都设置。

某些阀门如 SingleSignOn绑定(bind)到像 Host 这样的容器这意味着它不会对其他人起作用。这也适用于子类阀门。

关于tomcat6 - 自定义 Tomcat 阀门配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723437/

相关文章:

deployment - 将 .war 文件从另一个目录部署到 Tomcat 6

tomcat6 - 未正确定义CATALINA_HOME环境变量

java - eclipse : Element type "Context" must be declared

tomcat - 我们可以专门为 Tomcat Web 应用程序聘请 Valve

java - Spring Boot 嵌入式 Tomcat 中的自定义 SAML 身份验证阀 - 不适用于执行器端点

tomcat6 - Web 应用程序 WAR 文件中包含的自定义 Tomcat Valve

tomcat - Grails 部署到 tomcat,只有一些链接有效

apache - 使用 Pubby/Apache Tomcat 显示主页

java - 迁移到 Tomcat 8 : InstanceAlreadyExistsException datasource

java - JSF 应用程序为子上下文提供 404