以若依的springboot前后端分离的项目为例,如果条件可以,请一起点进源码进行求证。

1、SysLoginService类里的开始

2 、进入AuthenticationManager类

3 、因为securityConfig继承了WebSecurityConfigurerAdapter所以这里先进入这个抽象类


4 、因为WebSecurityConfigurerAdapter是一个抽象类最终还是会被ProviderManager这个实现类重写,所以进入ProviderManager类

5、 进入AuthenticationProvider类

6 、这个接口被AbstractUserDetailsAuthenticationProvider类声明,所以进入这个

7 、第6步的方法在下面封装

8 、DaoAuthenticationProvider类里重写了第7步的方法

9 、第8步的loadUserByUsername()方法来自UserDetailsService接口

10 、重点:在这里我们定义一个UserDetailsServiceImpl类实现UserDetailsService接口并重写loadUserByUsername()方法实现自定义登录逻辑!!!!这样在第8步的时候实际是调用了我们自定义的登录逻辑。

11、在第10步调用loadUserByUserName()之后返回UserDetailers,包含了用户的身份信息,之后在additionalAuthenticationChecks()校验密码

12、additionalAuthenticationChecks()方法被DaoAuthenticationProvider类重写了,在这里校验密码是否正确

该文深入讲解了SpringBoot中基于Security的认证流程,从SysLoginService开始,经过AuthenticationManager,到WebSecurityConfigurerAdapter和ProviderManager,然后详细探讨了AuthenticationProvider、AbstractUserDetailsAuthenticationProvider以及DaoAuthenticationProvider的角色。关键在于实现UserDetailsService的UserDetailsServiceImpl,其中的loadUserByUsername方法用于定制登录逻辑,而additionalAuthenticationChecks方法则用于密码验证。
5032

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



