二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

学完上期核心原理解析,我们已经知道了Spring Security 是由一系列的过滤器组成,通过拦截指定URL实现用户登录的操作。今天我们基于Spring Security 自带的UsernamePasswordAuthenticationFilter过滤器进行表单验证的开发。

一、表单验证过程源码解析

二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

1、页面输入用户名密码,提交登录请求。
2、登陆请求被UsernamePasswordAuthenticationFilter过滤器拦截,开始进行登录验证。
3、UsernamePasswordAuthenticationFilter获取用户名(username)、密码(password)参数,并创建一个未认证的UsernamePasswordAuthenticationToken,然后调用AuthenticationManager进行登录验证。
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

4、AuthenticationManager不直接进行登录验证,而是使用DaoAuthenticationProvider进行验证,DaoAuthenticationProvider调用UserDetailsService(自定义)对象的loadUserByUsername方法获取用户信息。
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

5、然后对获得的对象进行一系列的检查(自定义),包括预检查、附加检查、后检查。预检查检查用户是否被冻结、是否启用、是否过期。附加检查进行用户名密码验证。
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

6、登陆成功后将验证过的用户信息存储在SecurityContext中,然后调用登录成功处理器(自定义)。
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

二、表单验证实操

1、 自定义AuthUserDetails类,实现UserDetails接口,用户验证的方法根据自己的业务需要进行具体实现。
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

2、 自定义AuthUserDetailsService类,实现UserDetailsService接口,根据具体业务实现loadUserByUsername方法。
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

3、 自定义登录成功处理器RestAuthenticationSuccessHandlerr类,继承SavedRequestAwareAuthenticationSuccessHandler,重写onAuthenticationSuccess方法。
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

4、 自定义登录失败处理器RestAuthenticationFailureHandler类,继承SimpleUrlAuthenticationFailureHandler,重写onAuthenticationFailure方法。二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

5、 编写配置类SecurityConfig继承WebSecurityConfigurerAdapter。重写configure方法。二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证
6、 编写前端登录页面,进行登录。
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

三、资源管理系统演示

项目演示地址:http://175.24.75.121/#/login
用户名:visitor
密码:visitor
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证
二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证

四、GITHUB

前端工程:https://github.com/STIll-clx/rms-admin-web
后端工程:https://github.com/STIll-clx/rms