第5章 Spring Security 认证剖析

本文深入分析了Spring Security的认证过程,包括AuthenticationProvider、DaoAuthenticationProvider的认证流程和ProviderManager的工作机制。通过时序图和类图,阐述了过滤器如何调用AuthenticationManager进行认证,以及AuthenticationProvider如何完成加载用户信息、密码比对等步骤,帮助读者理解Spring Security的认证机制。

在之前章节只是分析过滤器,并没有仔细地去分析认证这一块。现在我们来仔细分析一下认证详细流程。

认证时序图

UsernamePasswordAuthenticationFilter 过滤器会调用 attemptAuthentication 方法进行认证。在 attemptAuthentication 方法内部会根据传递进来的 usernamepassword 封装成 UsernamePasswordAuthenticationToken 对象,并由 AuthenticationManager 管理器调用 authenticate 方法进行认证。AuthenticationManager 管理器会把具体认证工作委派给 ProviderManager 。由 ProviderManager 类来完成加载用户信息、检查用户状态、密码比对等等,如果认证成功,会生产 Authentication 对象并返回。大致的时序图如下所示。

在这里插入图片描述

AuthenticationProvider

AuthenticationProvider 的实现类才是真正执行完成认证逻辑的地方,多个 AuthenticationProvider 可以被注入到 ProviderManager 类中。每个 AuthenticationProvider 都对应不同认证方式。例如 DaoAuthenticationProvider 支持用户名和密码进行认证;JwtAuthenticationProvider 支持JWT进行认证。

public interface AuthenticationProvider {
    Authentication authenticate(Authentication var1) throws AuthenticationException;
	
    // 是否支持该认证方式
    boolean supports(Class<?> var1);
}
DaoAuthenticationProvider认证流程

AbstractUserDetailsAuthenticationProvider 类会调用 authenticate 方法,然后根据参数 Authentication 对象获取用户名。根据用户名从缓存获取 UserDetails 对象,如果获取不到,则委派 UserDetailsService 类加载用户信息。然后对用户信息执行 preAuthenticationChecksadditionalAuthenticationCheckspostAuthenticationChecks 校验,如果都通过,则放入缓存并创建新的 Authentication 对象。

在这里插入图片描述

ProviderManager

ProviderManager 是认证管理器,它可以配置多种认证方式,而且还可以配置父类认证管理器。首先遍历集合 providers ,然后判断认证器是否支持该认证方式。如果支持,则由 provider 进行认证。如果认证结果为空,则调用父类的认证器集合进行认证,直到返回认证结果或者抛出异常。最后,如果需要进行凭证清除,就把凭证设置为空,防止凭证泄漏。

在这里插入图片描述

类图

在这里插入图片描述

备注
本系列都是学习《深入浅出Spring Security》的笔记

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值