0


spring security Ⅲ—— authenticationManager.authenticate()验证流程

1、触发UsernamePasswordAuthenticationFilter

其返回值是一个方法 **getAuthenticationManager().authenticate(authRequest)** 的返回值
//将用户输入封装
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userDB.getUsername(), user.getPassword());
//调用authenticationManager.authenticate()方法进行验证
Authentication authenticate = authenticationManager.authenticate(authenticationToken);

2、ProviderManager

进入getAuthenticationManager().authenticate(authRequest)方法,发现它是在ProviderManager中实现的方法——provider.authenticate(authentication),其返回值是result,记住此时的authentication是封装的输入的账户密码。

3、AbstractUserDetailsAuthenticationProvider

进入provider.authenticate(authentication)方法后发现我们到了AbstractUserDetailsAuthenticationProvider类,而这个方法的返回值需要需要依赖user,要获取这个user,咱又不得不进入retrieveUser(username, (UsernamePasswordAuthenticationToken) authentication) 这个方法。在得到这个user之后才能进行下一步。

4、DaoAuthenticationProvider

由user = this.retrieveUser(username, (UsernamePasswordAuthenticationToken)authentication);**进入到DaoAuthenticationProvider**类,观察该方法的返回值,发现了熟悉的**loadUserByUsername(username)** 方法

5、UserDetailsServiceImpl

这正是自定义的userservice实现类,而其返回值就是从数据库查出来的用户名和密码。接下来原路返回

6、DaoAuthenticationProvider

回到第三步,此时我们已经获取了其中的user,接下来就是进行密码验证了,进入additionalAuthenticationChecks(user, (UsernamePasswordAuthenticationToken) authentication) 即验证数据库与输入信息是否相符。

整个流程到此基本就结束了,里面的密码校验方法可参考:security密码校验 密码验证登录逻辑

标签: spring java servlet

本文转载自: https://blog.csdn.net/qq_45947664/article/details/127329146
版权归原作者 念衢 所有, 如有侵权,请联系我们删除。

“spring security Ⅲ—— authenticationManager.authenticate()验证流程”的评论:

还没有评论