0

私は Tomcat を使用していますが、一般的な方法 (サーブレット 3.0) を使用したいと考えています。

web.xml にいくつかの構成済みフィルターがあり、そのうちの 1 つが GuiceFilter です。GuiceFilter は少しいじめっ子です...一度実行されると、リクエストを飲み込み、進行中のフィルターを呼び出すことはありません。このようにして、Guice の後にフィルターを実行することはできません。web.xml の代わりに guice ですべてのフィルターを定義できますが、これは一部のフィルターでは機能しません: "Tomcat WebSocket (JSR356) フィルター"最後のものではなく最初のものですが、GuiceFilterの前またはその中で実行する必要があります。

登録されているすべてのフィルターを取得して、guice に追加する方法を見つけました。

for (Entry<String, ? extends FilterRegistration> entry : context.getFilterRegistrations().entrySet()) {
        FilterRegistration filterRegistration = entry.getValue();
        System.out.println(entry.getKey() + " = " + filterRegistration);
        Class<? extends Filter> clazz = (Class<? extends Filter>) Class.forName(filterRegistration.getClassName());
        if (GuiceFilter.class.isAssignableFrom(clazz)) {
            continue;
        }

        bind(clazz).in(Singleton.class);
        filter(filterRegistration.getUrlPatternMappings()).through(clazz, filterRegistration.getInitParameters());
    }

しかし、この方法では、いくつかのフィルター (Guice 1 の前のもの) を 2 回実行します (通常のフィルター チェーンと Guice 1)。

フィルターの順序を取得する方法はありますか? (だから私はguiceの後にのみ追加することができます)

または、別の方法: 通常のチェーンからフィルターを削除して、guice のみを残す方法はありますか (他のすべてのフィルターを guice 自体に移動します)。

4

0 に答える 0