第3章 Spring Security 认证Authentication

在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 类包含 SecurityContextSecurityContext 类包含了 Authentication

在这里插入图片描述

SecurityContextHolder 提供三种实现 SecurityContext 的策略:

  • MODE_THREADLOCAL:使用ThreadLocal缓存 SecurityContext 对象。
  • MODE_INHERITABLETHREADLOCAL:使用InheritableThreadLocal缓存 SecurityContext 对象
  • MODE_GLOBAL:提供静态的 SecurityContext 对象。
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》的笔记


版权声明:本文为buffeer原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。