2

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

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

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

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

谢谢,

4

1 回答 1

2

那是不可能的。

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

例如

@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

于 2012-05-25T21:14:57.427 回答