以若依的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类重写了,在这里校验密码是否正确