在Spring Security中 Authentication 对象代表认证用户的数据对象,包含一些用户基本信息(用户名、密码)。
Authentication接口public interface Authentication extends Principal, Serializable {
// 获取用户权限
Collection extends GrandtedAuthoriry> getAuthorities();
// 获取用户凭证,一般就是密码
Object getCredentials();
// 获取用户详细信息,一般是UserDetail
Object getDetails();
// 获取当前用户信息
Object getPrincipal();
// 用户是否认证成功
boolean isAuthenticated();
//
void setAuthenticated(boolean var1) throws IllegalArgumentException;
}
获取Authentication对象
如果用户成功登录后,我们可以通过 SecurityContextHolder 对象来获取当前用户对象。
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
当然我们可以通过 SecurityContextHolder 对象进行最简单认证。
SecurityContextHolder.getContext().setAuthentication(
new TestingAuthenticationToken("username", "password", "ROLE_USER"));
SecurityContextHolder
SecurityContextHolder 类包含 SecurityContext ,SecurityContext 类包含了 Authentication 。
SecurityContextHolder 提供三种实现 SecurityContext 的策略:
- MODE_THREADLOCAL:使用ThreadLocal缓存 SecurityContext 对象。
- MODE_INHERITABLETHREADLOCAL:使用InheritableThreadLocal缓存 SecurityContext 对象
- MODE_GLOBAL:提供静态的 SecurityContext 对象。
public interface SecurityContext extends Serializable {
Authentication getAuthentication();
void setAuthentication(Authentication var1);
}
Spring Security提供了一个实现类 SecurityContextImpl。
public class SecurityContextImpl implements SecurityContext {
private Authentication authentication;
public SecurityContextImpl() {
}
public SecurityContextImpl(Authentication authentication) {
this.authentication = authentication;
}
// 省略其他方法
}
备注
本系列都是学习《深入浅出Spring Security》的笔记



