二、Spring Security UsernamePasswordAuthenticationFilter基于表单的认证
学完上期核心原理解析,我们已经知道了Spring Security 是由一系列的过滤器组成,通过拦截指定URL实现用户登录的操作。今天我们基于Spring Security 自带的UsernamePasswordAuthenticationFilter过滤器进行表单验证的开发。
一、表单验证过程源码解析
1、页面输入用户名密码,提交登录请求。
2、登陆请求被UsernamePasswordAuthenticationFilter过滤器拦截,开始进行登录验证。
3、UsernamePasswordAuthenticationFilter获取用户名(username)、密码(password)参数,并创建一个未认证的UsernamePasswordAuthenticationToken,然后调用AuthenticationManager进行登录验证。
4、AuthenticationManager不直接进行登录验证,而是使用DaoAuthenticationProvider进行验证,DaoAuthenticationProvider调用UserDetailsService(自定义)对象的loadUserByUsername方法获取用户信息。
5、然后对获得的对象进行一系列的检查(自定义),包括预检查、附加检查、后检查。预检查检查用户是否被冻结、是否启用、是否过期。附加检查进行用户名密码验证。
6、登陆成功后将验证过的用户信息存储在SecurityContext中,然后调用登录成功处理器(自定义)。
二、表单验证实操
1、 自定义AuthUserDetails类,实现UserDetails接口,用户验证的方法根据自己的业务需要进行具体实现。
2、 自定义AuthUserDetailsService类,实现UserDetailsService接口,根据具体业务实现loadUserByUsername方法。
3、 自定义登录成功处理器RestAuthenticationSuccessHandlerr类,继承SavedRequestAwareAuthenticationSuccessHandler,重写onAuthenticationSuccess方法。
4、 自定义登录失败处理器RestAuthenticationFailureHandler类,继承SimpleUrlAuthenticationFailureHandler,重写onAuthenticationFailure方法。
5、 编写配置类SecurityConfig继承WebSecurityConfigurerAdapter。重写configure方法。
6、 编写前端登录页面,进行登录。
三、资源管理系统演示
项目演示地址:http://175.24.75.121/#/login
用户名:visitor
密码:visitor
四、GITHUB
前端工程:https://github.com/STIll-clx/rms-admin-web
后端工程:https://github.com/STIll-clx/rms