spring security 核心类

Authentication

Authentication 是一个接口,用来表示用户认证信息的,在用户登录认证之前相关信息会封装为一个 
Authentication 具体实现类的对象,在登录认证成功之后又会生成一个信息更全面,包含用户权限等信息的 
Authentication 对象,然后把它保存在 SecurityContextHolder 所持有的 SecurityContext 中,供后
续的程序进行调用,如访问权限的鉴定等


SecurityContextHolder

SecurityContextHolder 是用来保存 SecurityContext 的。SecurityContext 中含有当前正在访问系统
的用户的详细信息。默认情况下,SecurityContextHolder 将使用 ThreadLocal 来保存 
SecurityContext,这也就意味着在处于同一线程中的方法中我们可以从 ThreadLocal 中获取到当前的 
SecurityContext。因为线程池的原因,如果我们每次在请求完成后都将 ThreadLocal 进行清除的话,那么
我们把 SecurityContext 存放在 ThreadLocal 中还是比较安全的。这些工作 Spring Security 已经自动
为我们做了,即在每一次 request 结束后都将清除当前线程的 ThreadLocal。


AuthenticationManager 和 AuthenticationProvider

AuthenticationManager 是一个用来处理认证(Authentication)请求的接口。在其中只定义了一个方法 
authenticate(),该方法只接收一个代表认证请求的 Authentication 对象作为参数,如果认证成功,则会
返回一个封装了当前用户权限等信息的 Authentication 对象进行返回


UserDetailsService

通过 Authentication.getPrincipal() 的返回类型是 Object,但很多情况下其返回的其实是一个 
UserDetails 的实例。UserDetails 是 Spring Security 中一个核心的接口。其中定义了一些可以获取用
户名、密码、权限等与认证相关的信息的方法。Spring Security 内部使用的 UserDetails 实现类大都是内
置的 User 类,我们如果要使用 UserDetails 时也可以直接使用该类。在 Spring Security 内部很多地方
需要使用用户信息的时候基本上都是使用的 UserDetails,比如在登录认证的时候。登录认证的时候 Spring 
Security 会通过 UserDetailsService 的 loadUserByUsername() 方法获取对应的 UserDetails 进行
认证,认证通过后会将该 UserDetails 赋给认证通过的 Authentication 的 principal,然后再把该 
Authentication 存入到 SecurityContext 中。之后如果需要使用用户信息的时候就是通过 
SecurityContextHolder 获取存放在 SecurityContext 中的 Authentication 的 principal。


GrantedAuthority

Authentication 的 getAuthorities() 可以返回当前 Authentication 对象拥有的权限,即当前用户拥有
的权限。其返回值是一个 GrantedAuthority 类型的数组,每一个 GrantedAuthority 对象代表赋予给当前
用户的一种权限。GrantedAuthority 是一个接口,其通常是通过 UserDetailsService 进行加载,然后赋
予给 UserDetails 的。


GrantedAuthority 中只定义了一个 getAuthority() 方法,该方法返回一个字符串,表示对应权限的字符
串表示,如果对应权限不能用字符串表示,则应当返回 null。


Spring Security 针对 GrantedAuthority 有一个简单实现 SimpleGrantedAuthority。该类只是简单的
接收一个表示权限的字符串。Spring Security 内部的所有 AuthenticationProvider 都是使用 
SimpleGrantedAuthority 来封装 Authentication 对象。


spring security 详细介绍:http://wiki.jikexueyuan.com/project/spring-security/core-classes.html

 

你可能感兴趣的:(spring,security)