uthentication:认证 Authorization:授权 POM依赖: - <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-security</artifactId>
- </dependency>
复制代码图解: 自然语言描述: - 用户提交用户名/密码 ==> 调用new UsernamePasswordAuthenticationToken(username, password)生成未认证的Authentication
- 调用authenticationManager.authenticate(authenticationToken)认证
- 其具体实现为:ProviderManager.authenticate(authentication)
- ProviderManager将委托DaoAuthenticationProvider去认证
- DaoAuthenticationProvider的authenticate方法是继承抽象父类AbstractUserDetailsAuthenticationProvider的
- 在父类的authenticate方法中 调用子类覆写的抽象方法 retrieveUser通过UserDetailsService().loadUserByUsername获取UserDetails对象
- 加载成功后调用子类覆写的抽象方法additionalAuthenticationChecks判断密码是否一致
- 最后调用方法createSuccessAuthentication构建认证后的Authentication
- 在这里会先调用DaoAuthenticationProvider的createSuccessAuthentication方法,判断是否需要升级密码,通过userDetailsPasswordService.updatePassword方法升级
- 注意:retrieveUser、additionalAuthenticationChecks、createSuccessAuthentication在DaoAuthenticationProvider中均有覆写
- 认证完成后返回Authentication
- 在访问非登录请求时,可以通过请求携带的token获取UserDetails对象,然后构建已经认证的Authenticate,最后通过SecurityContextHolder.getContext().setAuthentication(authenticationToken);保存到上下文中,表示已经认证过了
- 注意:构建已经认证的Authenticate一般通过UsernamePasswordAuthenticationToken生成
|
评分
-
查看全部评分总评分 : 金币 +60
1、本帖所有言论、观点及图片均为会员个人观点,不代表本站立场。
2、本帖资源内容来源于网友、站友、作者推广引流自愿分享或其他公开网络渠道,仅用于交流与学习参考。
3、如本帖内容涉及任何版权或知识产权问题,请立即点论坛右侧邮件图标联系我们,我们将在核实后及时删除,并致以歉意。
4、本站资料仅供站友个人学习参考,禁止以任何形式进行传播或商用;如下载学习,请务必在 24 小时内删除。