SpringSecurity 核心组件介绍

SecurityContextHolder
SecurityContextHolder它持有的是安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权等等,这些都被保存

SecurityContextHolder默认使用ThreadLocal 策略来存储认证信息。看到ThreadLocal 也就意味着,这是一种与线程绑定的策略。在web环境下,Spring Security在用户登录时自动绑定认证信息到当前线程,在用户退出时,自动清除当前线程的认证信息。

 SecurityContext
持有Authentication对象和其他可能需要的信息

 AuthenticationManager 
  AuthenticationManager 其中可以包含多个AuthenticationProvider

ProviderManager
  ProviderManager对象为AuthenticationManager接口的实现类

AuthenticationProvider 
 AuthenticationProvider 主要用来进行认证操作的类 调用其中的authenticate()方法去进行认证操作

Authentication
  Authentication:Spring Security方式的认证主体

鉴权对象,该对象主要包含了用户的详细信息(UserDetails)和用户鉴权时所需要的信息,如用户提交的用户名密码、Remember-me Token,或者digest hash值等,

GrantedAuthority
 GrantedAuthority:对认证主题的应用层面的授权,含当前用户的权限信息,通常使用角色表示

UserDetails
 UserDetails:构建Authentication对象必须的信息,可以自定义,可能需要访问DB得到

这个接口规范了用户详细信息所拥有的字段,譬如用户名、密码、账号是否过期、是否锁定等。在Spring Security中,获取当前登录的用户的信息,一般情况是需要在这个接口上面进行扩展,用来对接自己系统的用户

UserDetailsService
 UserDetailsService:通过username构建UserDetails对象,通过loadUserByUsername根据userName获取UserDetail对象 (可以在这里基于自身业务进行自定义的实现  如通过数据库,xml,缓存获取等)     

通过扩展这个接口来显示获取我们的用户信息,用户登陆时传递的用户名和密码也是通过这里这查找出来的用户名和密码进行校验,但是真正的校验不在这里,而是由AuthenticationManager以及AuthenticationProvider负责的,需要强调的是,如果用户不存在,不应返回NULL,而要抛出异常UsernameNotFoundException

你可能感兴趣的:(SpringSecurity 核心组件介绍)