我创建了两个自定义过滤器,一个负责验证jwt,另一个负责处理jwt ExpiredJwtException
.
我找到了按正确顺序调用它们的解决方案:多个spring安全过滤器,这样 ExpiredJwtException
正确捕获:
http.antMatcher("jwtRequestFilter/exceptionHandlerFilter/**")
.addFilterBefore(exceptionHandlerFilter, FilterSecurityInterceptor.class)
.antMatcher("jwtRequestFilter/**")
.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
经过一番重构,我只需要:
http.antMatcher("jwtRequestFilter/**")
.addFilterBefore(exceptionHandlerFilter, FilterSecurityInterceptor.class)
.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
但我不明白 antMatcher
方法在这里工作。或者 antMatcher("jwtRequestFilter/exceptionHandlerFilter/**")
或者 antMatcher("jwtRequestFilter/**")
需要保持正确的秩序。
表达式是如何表达的 antMatcher
工作?做 **
表示链中的其他过滤器,以及 jwtRequestFilter
在表达式的开头表示它是最后一个筛选器?
2条答案
按热度按时间bybem2ql1#
这个
antMatcher
方法将匹配传入请求的路径,它与筛选器的名称无关。来自javadoc的
antMatcher
:允许将httpsecurity配置为仅在匹配提供的ant模式时调用。
这意味着只有当传入的请求与您提供的ant模式匹配时,才会调用您的定制过滤器(以及过滤器链的其余部分)。
考虑一下这个例子
如果您请求获取“/admin/home”,那么
HttpSecurity
请求将由customfilter处理。如果您请求获取“/user/home”,那么
HttpSecurity
不会被调用customfilter不会处理请求。要了解ant样式的路径匹配是如何工作的,请参阅antpathmatcher的javadoc。
pdkcd3nj2#
您需要为每个端点配置httpsecurity。
另请参见:
16.3. 多httpsecurity