JavaEE6启用/禁用webfilter而无需重新编译

时间:2012-05-24 18:43:10

标签: java-ee annotations java-ee-6 servlet-filters

我将应用程序迁移到新的JavaEE6标准。在创建新过滤器时,注释非常容易使用。我只需要在我的POJO类中添加一个@WebFilter注释,它运行良好。

令我感到困惑的是:带有注释的所有过滤器都将由容器自动加载。有时这是不希望的。我可以创建一组过滤器,不同的webapp会选择仅使用这些过滤器的子集。所以我的问题是:是否有一种基于不同部署启用/禁用过滤器的简单方法,同时仍允许我为每个过滤器类使用简单的WebFilter注释?

我在这个顶部搜索时发现了这篇文章: Dynamically registering WebFilter with Java EE 6

但是这篇文章似乎建议不要在每个过滤器类上使用注释,并通过直接引用每个过滤器类的ServletContextListener加载它们。它似乎不是最佳解决方案。

谢谢,

1 个答案:

答案 0 :(得分:2)

那是不可能的。

最好的办法是扩展过滤器,检查一些web.xml上下文参数,或VM参数,或指示不应使用过滤器的环境变量。

E.g。

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if ("true".equals(System.getProperty("com.example.DISABLE_FILTER"))) {
        chain.doFilter(request, response);
        return;
    }

    // Original filter code here.
}

可以通过提供VM参数-Dcom.example.DISABLE_FILTER=true来禁用。