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

(24) 2024-01-23 18:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说理解Spring Security中的默认身份认证过滤器,希望能够帮助你!!!。

我们知道 Spring Security 会将 DelegatingFilterProxy 插入到 Servlet Filter Chain 中,然后将要过滤的请求通过 FilterChainProxy 代理给匹配的 SecurityFilterChain;这些 SecurityFilterChain 中包含着真正做安全相关工作的 Filter 过滤器。

理解Spring Security中的默认身份认证过滤器_https://bianchenghao6.com/blog__第1张

理解Spring Security中的默认身份认证过滤器_https://bianchenghao6.com/blog__第2张

这些 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。

理解Spring Security中的默认身份认证过滤器_https://bianchenghao6.com/blog__第3张

BasicAuthenticationFilter与 UsernamePasswordAuthenticationFilter 的区别在于认证之后的行为。

无论认证成功与否,BasicAuthenticationFilter 都不会做出重定向的响应。

  • 如果认证失败,则通过默认的 BasicAuthenticationEntryPoint 返回 401 响应
  • 如果认证成功,则继续执行 filter chain,这样就能执行到真正的业务方法

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复