【问题标题】:Custom Tomcat Valve Configuration自定义 Tomcat 阀门配置
【发布时间】:2011-04-13 00:18:57
【问题描述】:

我写了一个定制的 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 中没有。

有谁知道当我的 web 应用程序的 META-INF/context.xml 中声明了 Tomcat 时,如何让 Tomcat 正确配置我的 Valve?

谢谢, 丹

这会导致我的阀门加载并由 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>

【问题讨论】:

    标签: tomcat6 context.xml tomcat-valve


    【解决方案1】:

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

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

    您可以尝试从两种设置中打印出 Valve 上的 getContainer(),看看它是否正确识别了每次设置的 Catalina containers (Engine, Host, Context)

    SingleSignOn 这样的某些阀门绑定到像Host 这样的容器,这意味着它不会在其他人身上工作。这也适用于子类阀门。

    【讨论】:

      【解决方案2】:

      作为启动的一部分,SetPropertiesRule 将尝试为您的自定义属性查找 getter。

      【讨论】:

        猜你喜欢
        • 2011-09-28
        • 2010-12-22
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多