Spring Security 基于表单登录的认证模式
一、思维导图

二、原理分析
当我们在项目中引入 Spring Security 的相关依赖后,默认的就是表单登录形式。在开始之前,如果是我们自己来实现表单登录的功能,那么我们需要做哪些工作呢?
就我个人而言,我可能会考虑到以下几点:
1. 配置用户信息,存储如账号、密码等;密码不能以明文传输,需要加密功能
2. 执行校验
3. 认证成功或者失败的处理方案
大致的流程图如下:

上面我们自己设想的实现方案,属于"低配版"模式,下面我们来研究 Spring Security 是怎么做的。Spring Security的思路和我们大同小异,它的优点在于其提供了很好的封装,提高了框架本身的可扩展性。
Spring Security 的实现步骤如下:
-
UsernamePasswordAuthenticationFilter拦截器拦截前端传递的表单登录请求,将登录信息(username、password)封装成UsernamePasswordAuthenticationToken,传递给AuthenticationManager认证管理器 -
AuthenticationManager认证管理器根据Token的类型遍历获取对应的Provider,也即是DaoAuthenticationProvider,执行认证流程 -
DaoAuthenticationProvider依靠PasswordEncoder和UserDetailsService对登录请求进行验证 -
验证通过,由
AuthenticationSuccessHandler认证成功处理器进行处理 -
验证失败,由
AuthenticationFailureHandler认证失败处理器进行处理
流程图如示所示:

1.UsernamePasswordAuthenticationFilter 表单登录拦截器,用以捕获前端传递的登录信息(username、 password),并将登录信息封装成某些Token。
2.AuthenticationManager 认证管理器,可简单的理解为分配工作的领导。DaoAuthenticationProvider DAO认证处理器,相当于被安排干活的童鞋;从名字DAO也可以简单的推测出:它与数据库中的用户信息密不可分。
3.PasswordEncoder 密码加密器,密码不能明文传输,需要加密。UserDetailsService用户信息Service层,这个也很好理解,前端传递的登录信息肯定是有对应的数据库实体存储。
4.AuthenticationSuccessHandler 认证成功处理器 AuthenticationFailureHandler认证失败处理器。
经过上述的原理分析,我们大体上知道整个表单登录有三个模块需要处理。
-
登录前置处理:用户信息的封装、密码加密器的设置
-
登录中处理

本文详细介绍了Spring Security实现基于表单登录的认证模式。内容包括思维导图、原理分析,以及登录前置处理(用户信息配置、密码加密器设置)、登录中处理(登录校验)和登录后置处理(登录成功与失败的处理方案)。通过实例展示了如何配置UserDetails、UserDetailsService、PasswordEncoder,以及自定义登录成功和失败处理器。
最低0.47元/天 解锁文章
1798

被折叠的 条评论
为什么被折叠?



