我们知道 Spring Security 会将 DelegatingFilterProxy 插入到 Servlet Filter Chain 中,然后将要过滤的请求通过 FilterChainProxy 代理给匹配的 SecurityFilterChain;这些 SecurityFilterChain 中包含着真正做安全相关工作的 Filter 过滤器。
这些 Filter 过滤器中的一部分,它们的职责就是进行身份验证,比如
UsernamePasswordAuthenticationFilter 和 BasicAuthenticationFilter。
UsernamePasswordAuthenticationFilter 是一个
AbstractAuthenticationProcessingFilter 的子类,实现了 attemptAuthentication 方法,没有重写其他方法。
从继承关系可以看到
BasicHttpAuthenticationFilter 继承自抽象类 OncePerRequestFilter。
public class BasicAuthenticationFilter extends OncePerRequestFilter
OncePerRequestFilter 的字面意思是:Once Per Request,即每个请求只执行一次。
BasicAuthenticationFilter 的实现并不复杂,无非是从 Authorization header 中取出用户名密码,然后创建出
UsernameAuthenticationToken,接着调用
AuthenticationManager.authenticate() 方法。
BasicAuthenticationFilter 使用和
UsernamePasswordAuthenticationFilter 一样的 AuthenticationProvider。
BasicAuthenticationFilter与
UsernamePasswordAuthenticationFilter 的区别在于认证之后的行为。
无论认证成功与否,BasicAuthenticationFilter 都不会做出重定向的响应。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!