【发布时间】:2020-10-22 03:37:22
【问题描述】:
我正在开发一个基于 Spring Boot 的应用程序。我注意到,对于异步端点,身份验证过滤器被调用两次,对于常规端点,它被调用一次。我找不到原因,但我在网络 https://jira.spring.io/browse/SPR-12608 中发现了一个问题,据说异步端点的过滤器在异步端点执行之前和之后被调用了两次。它将解释双重身份验证调用。我想知道这是预期的行为,为什么这样做以及如何避免双重身份验证。
更新: 我找到了一种方法来避免在异步端点完成后第二次触发过滤器。我需要做的是分析分配给请求的调度程序类型,如果它是异步的 - 在过滤器链上继续进行。我在过滤器中添加了以下方法:
@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);
}
}
【问题讨论】:
标签: spring spring-boot spring-security