理解Spring Security中的默认身份认证过滤器

我们知道 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 都不会做出重定向的响应。

  • 如果认证失败,则通过默认的 BasicAuthenticationEntryPoint 返回 401 响应
  • 如果认证成功,则继续执行 filter chain,这样就能执行到真正的业务方法
  • 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年10月19日
    下一篇 2022年10月19日

    相关推荐