私は 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 自体に移動します)。