网上很多Spring Security集成jwt的配置教程, 有一些配置的filter位置是错的.
这个是对的:
https://cloud.tencent.com/developer/article/1555599
内容:
.addFilterBefore(new JwtLoginFilter("/login",authenticationManager()),UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(new JwtFilter(),UsernamePasswordAuthenticationFilter.class)
错误教程的共同点: 把JwtFilter(验证token的过滤器)放在JwtLoginFilter(登录过滤器, 如果没有自定义也可以是UsernamePasswordAuthenticationFilter)的前面. 这样的问题在于如果用户携带过期的token访问登录接口, 将会得到一个401forbidden错误.
官网对过滤器顺序也提出了参考建议, 这里挑选常用的几个, 可以参考.(排名分先后)
CorsFilter
LogoutFilter
CasAuthenticationFilter
OAuth2LoginAuthenticationFilter
UsernamePasswordAuthenticationFilter
BearerTokenAuthenticationFilter
ExceptionTranslationFilter
FilterSecurityInterceptor