2

アプリケーションを新しいJavaEE6標準に移行します。また、新しいフィルターを作成するときに注釈を使用するのは非常に簡単です。POJOクラスに@WebFilterアノテーションを追加するだけで、うまく機能します。

私を混乱させたのは、注釈付きのすべてのフィルターがコンテナーによって自動的にロードされるということです。これは時々望まれません。フィルタのセットを作成すると、別のWebアプリケーションがこれらのフィルタのサブセットのみを使用することを選択する場合があります。だから私が持っている質問:異なる展開に基づいてフィルターを有効/無効にする簡単な方法はありますが、それでも各フィルタークラスに単純なWebFilterアノテーションを使用できますか?

このトップを検索したときにこの記事を見つけました: WebFilterをJavaEE6に動的に登録する

ただし、この記事では、各フィルタークラスでアノテーションを使用せず、各フィルタークラスを直接参照する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 に答える