2012-05-24 32 views
2

我将应用程序迁移到新的JavaEE6标准。创建新过滤器时,注释非常易于使用。我只需要为我的POJO类添加一个@WebFilter注释,它运行良好。JavaEE6在不重新编译的情况下启用/禁用web过滤器

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

我发现这篇文章在此之上进行搜索时: Dynamically registering WebFilter with Java EE 6

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

谢谢

回答

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来禁用它。

+0

谢谢你的回复。自从发布后,我使用了类似的方法作为您的回复,但是从配置文件中为每个过滤器设置了单独的标志,其注入方式与本博客中讨论的方法类似: http://www.adam-bien.com/roller/abien/entry/how_to_configure_java_ee – Alan

+0

我意外地低估了你的答案......并且没有办法对它投票,因为我的投票被锁定了......直到问题被更新:(。对不起。 – obe6

+0

@ obe6:你可以当编辑帖子时撤消投票我刚刚编辑它 – BalusC

相关问题