TA的每日心情 | 慵懒 2024-6-26 16:35 |
---|
签到天数: 14 天 [LV.3]偶尔看看
|
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
|