私はSpringブートベースのアプリケーションを開発しています。非同期エンドポイントの場合、認証フィルターが2回呼び出されることに気付きました。通常のエンドポイントでは、1回呼び出されます。私は理由を見つけることができませんでしたが、非同期エンドポイントの実行の前後に、非同期エンドポイントのフィルタが2回呼び出されていると言われているネットで問題が見つかりました。https://jira.spring.io/browse/SPR-12608それは二重認証の呼び出しを説明するでしょう。私はこの期待された振る舞いが何であるか、また二重認証を避ける方法が何であるかを知りたいと思います。非同期エンドポイントのフィルタチェーンが2回呼び出される理由
UPD: 非同期エンドポイントが終了した後にフィルタが2度目に起動するのを回避する方法を見つけました。私がする必要があるのは、非同期の場合、どのような種類のディスパッチャがリクエストに割り当てられているのかを分析することです。私はフィルタに次のメソッドを追加しました:
@Override
public final void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
if (request.getDispatcherType() == DispatcherType.ASYNC) {
filterChain.doFilter(request, response);
} else {
super.doFilter(request, response, filterChain);
}
}