Spring Security 学习笔记 - 认识 Spring Security

Spring Security

基于 Spring 的权限管理框架,权限管理主要由身份认证Authentication和权限管理Authorization两部分组成。身份认证负责对用户进行身份鉴定,如验证用户名+口令的方式,鉴定的结果就是通过或者不通过。权限管理负责对用户(准确的说是通过了身份认证的用户)在系统内的权限提供支持,如管理员A允许访问文件,管理员B不允许导出数据。

Spring Security
Authentication
Authorization
AuthenticationManager
Authentication
SecurityContextHolder
AccessDeclsionManager
AccessDecisionVoter
ConfigAttribute

AuthenticationManager

public interface AuthenticationManager

Authentication authenticate(Authentication authentication) throws AuthencationException;

AuthenticationManager 是一个接口,定义了authenticate方法,在系统中用来进行身份认证的方法:

  • 返回 Authencition 表示认证成功
  • 抛出 AuthenticationException 异常表示认证失败

AuthenticationManager主要实现类是ProviderManager,ProviderManager中管理众多AuthenticationProvider。因此,在一次完整的认证流程中,实际允许存在多个(种)认证,例如表单认证、用户名密码认证、指纹认证,每一个认证都是一个AuthenticationProvider,都由ProviderManager进行统一管理。

Authentication

Authentication保存认证以及认证成功的信息,其接口定义为:

public interface Authentication extends Principal, Serializable {
Collection<? extends GrantedAuthority> getAuthorities();
Object getCredentials();
Object getdetails();
Object getPrincipal();
Boolean isAuthenticated();
setAuthenticated();
}
  • getAuthorities 获取权限
  • getCredentials 获取凭证,如密码
  • getdetails 获取用户详情
  • getPrincipal 获取用户身份信息,如用户名等
  • isAuthenticated 用户是否认证成功

SecurityContextHolder

Spring Security基于ThreadLocal管理,因此SecurityContextHolder是用来获取Authentication的工具或者说方法。用户登录成功后,Spring Security将用户信息保存到SecurityContextHolder,SecurityContextHolder通过ThreadLocal实现本次认证信息与当前请求线程绑定,不能被其它线程访问。当请求结束,SecurityContextHolder将用户信息放到Session保存,并清空SecurityContextHolder中的数据。下次请求来到时,SecurityContextHolder从Session中获取用户信息,请求结束时保存回Session并清空SecurityContextHolder。

AccessDecisionManager

AccessDecisionManager 访问决策管理器,用来决定此次访问是否被允许。需要AccessDecisionVoter配合。

AccessDecisionvoter

AccessDecisionVoter 访问决策投票器,检查用户是否具备应有的角色,进而投出赞成、返回或弃权票。AccessDecisionManager和AccessDecisionvoter都有众多实现类,AccessDecisionManager会挨个遍历AccessDecisionvoter,进而决定是否允许用户访问。

ConfigAttribute

ConfigAttribute 用来保存授权时的角色信息。

bilibili - 编程不良人 - SpringSecurity最新实战

posted @   试试手气  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示