Spring Security 中SecurityContextHolder.getContext().getAuthentication() 详解介绍

在这里插入图片描述

@SpringBootApplication
public class GetloginuserApplication {

    public static void main(String[] args) {
        SpringApplication.run(GetloginuserApplication.class, args);
    }

}
@RestController
public class HelloController {
    @GetMapping("/hello")
    public void hello() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        System.out.println("authentication.getClass() = " + authentication.getClass());
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在 Spring Security 中,SecurityContextHolder 是一个重要的类,用于存储应用程序的安全上下文(Security Context),其中包含当前用户的认证信息和权限。

SecurityContextHolder.getContext().getAuthentication() 详解

这一行代码通过以下步骤获取当前用户的认证信息:

  • SecurityContextHolder:SecurityContextHolder 是一个持有 SecurityContext 的静态类,通常在 Spring Security 框架初始化时会自动配置并维护。SecurityContextHolder 中的 SecurityContext 是当前线程上下文中的安全上下文,用于存储和获取当前用户的认证和权限信息。

  • getContext():getContext() 方法从 SecurityContextHolder 中获取当前线程的 SecurityContext 实例。

  • getAuthentication():SecurityContext 的 getAuthentication() 方法返回当前的 Authentication 对象。该对象代表了当前用户的认证信息,如果用户已通过认证(如成功登录),getAuthentication() 会返回用户的 Authentication 实例;否则返回 null。

Authentication 对象的作用

Authentication 接口包含有关当前用户的认证信息的详细信息,例如用户名、凭证(如密码)、权限(Roles/Authorities),以及是否已认证等。它在 Spring Security 中通常用于:

  • 身份信息:通过authentication.getPrincipal()获取用户的标识信息,例如用户名或 UserDetails 实例。
  • 凭证信息:通过 authentication.getCredentials() 获取用户的认证凭证,通常是密码(认证成功后通常会被清除为 null)。
  • 授权信息:通过 authentication.getAuthorities() 获取用户的权限,返回一个表示用户角色的 GrantedAuthority 列表。
  • 认证状态:通过 authentication.isAuthenticated() 检查当前用户是否已认证

示例

假设用户已登录,authentication 可能包含以下信息:

public void hello() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    
    // 打印用户身份信息
    System.out.println("Principal: " + authentication.getPrincipal());
    
    // 打印用户权限
    System.out.println("Authorities: " + authentication.getAuthorities());
    
    // 打印是否已认证
    System.out.println("Is Authenticated: " + authentication.isAuthenticated());
}

常见的 Authentication 实现

  • UsernamePasswordAuthenticationToken:当用户使用用户名和密码登录时,Spring Security 会使用此类作为 Authentication 实现。
  • AnonymousAuthenticationToken:用于表示未认证或匿名用户的认证信息。
  • OAuth2AuthenticationToken:当使用 OAuth2 认证时,Spring Security 会使用此类作为 Authentication 实现。
    通过 Authentication 获取当前用户的信息,可以便于控制访问和权限验证,让开发者轻松获取当前登录用户的各种信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值