【发布时间】:2020-03-18 14:55:45
【问题描述】:
我想了解为什么我们通常需要在初始 configure(HttpSecurity http) 方法中调用 http.addFilterBefore(jwtAuthenticationFilter(),UsernamePasswordAuthenticationFilter.class) 方法? 据我了解,它将首先添加 jwtAuthenticationFilter() 的结果,然后是 UsernamePasswordAuthenticationFilter 但我不知道为什么? jwtAuthenticationFilter() 实现:
@Override
protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.userDetailsService(customerService).passwordEncoder(bCryptPasswordEncoder());
}
难道扩展WebSecurityConfigurerAdapter的安全类只会在启动时调用一次?
【问题讨论】:
-
您尝试使用
addFilterAfter(jwtAuthenticationFilter(),UsernamePasswordAuthenticationFilter.class)看看会发生什么吗? -
对于第二个问题,到达您应用程序的每个请求都将通过您的安全类和过滤器。
-
我个人认为,在 UsernameAndPassword 身份验证过滤器之前调用 JWT 身份验证过滤器只是为了确保过滤器尊重 Spring Security 过滤器链顺序,并且它与 UsernameAndPassword 过滤器没有直接关系。重要的一点是在链中进一步调用之前一起调用身份验证处理机制。有关安全过滤器链的更多信息,请查看官方文档docs.spring.io/spring-security/site/docs/3.0.x/reference/…
标签: spring spring-boot spring-security jwt