SpringSecurity原理剖析

本文详细解析了SpringSecurity中的认证流程,重点关注了UsernamePasswordAuthenticationFilter的作用,AuthenticationManager的职责以及ProviderManager和多种认证方式。还介绍了SecurityContextPersistenceFilter和AnonymousAuthenticationFilter在整体架构中的位置,以及ExceptionTranslationFilter处理异常的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringSecurity认证流程

在这里插入图片描述

  1. UsernamePasswordAuthenticationFilter :是我们最常用的用户名和密码认证方式的主要处理类,构造了一个UsernamePasswordAuthenticationToken对象实现类,将用请求信息封装为Authentication

  2. Authentication接口 : 封装了用户相关信息。

  3. AuthenticationManager接口 :定义了认证Authentication的方法,是认证相关的核心接口,也是发起认证的出发点,因为在实际需求中,我们可能会允许用户使用用户名+密码登录,同时允许用户使用邮箱+密码,手机号码+密码登录,甚至,可能允许用户使用指纹登录(还有这样的操作?没想到吧),所以说AuthenticationManager一般不直接认证,AuthenticationManager接口的常用实现类ProviderManager 内部会维护一个List列表,存放多种认证方式,实际上这是委托者模式的应用(Delegate)。也就是说,核心的认证入口始终只有一个:AuthenticationManager

​ AuthenticationManager,ProviderManager ,AuthenticationProvider…

​ 用户名+密码(UsernamePasswordAuthenticationToken),邮箱+密码,手机号码+密码登录则对应了三个AuthenticationProvider

  1. DaoAuthenticationProvider : 用于解析并认证 UsernamePasswordAuthenticationToken 的这样一个认证服务提供者,对应以上的几种登录方式。

  2. UserDetailsService接口:Spring Security 会将前端填写的username 传给 UserDetailService.loadByUserName方法。我们只需要从数据库中根据用户名查找到用户信息然后封装为UserDetails的实现类返回给SpringSecurity 即可,自己不需要进行密码的比对工作,密码比对交由SpringSecurity处理。

  3. UserDetails接口:提供核心用户信息。通过UserDetailsService根据用户名获取处理的用户信息要封装成UserDetails对象返回。然后将这些信息封装到Authentication对象中。

SpringSecurity原理剖析

SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。

  • 其实 UsernamePasswordAuthenticationFilter 面还有过滤器 SecurityContextPersistenceFilter

​ SecurityContextPersistenceFilter 两个主要职责:

​ 请求来临时,创建SecurityContextHolder安全上下文信息

​ 请求结束时,清空SecurityContextHolder安全上下文信息

  • 其实 UsernamePasswordAuthenticationFilter 还有过滤器 AnonymousAuthenticationFilter

​ AnonymousAuthenticationFilter 匿名身份过滤器

​ 这个过滤器个人认为很重要,需要将它与UsernamePasswordAuthenticationFilter 放在一起比较理解

​ spring security为了兼容未 登录的访问,也走了一套认证流程,只不过是一个匿名的身份。
在这里插入图片描述

  • UsernamePasswordAuthenticationFilter :是我们最常用的用户名和密码认证方式的主要处理类,构造了一个UsernamePasswordAuthenticationToken对象实现类,将用请求信息封装为Authentication

  • BasicAuthenticationFilter… :将UsernamePasswordAuthenticationFilter的实现类UsernamePasswordAuthenticationToken封装成的 Authentication进行登录逻辑处理

  • ExceptionTranslationFilter :主要用于处理AuthenticationException(认证)和AccessDeniedException(授权)的异常

  • FilterSecurityInterceptor : 获取当前 request 对应的**权限配置****,调用访问控制器进行鉴权操作@prePostEnabled注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值