2012-05-24 65 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

相關問題