@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 获取当前用户的信息,可以便于控制访问和权限验证,让开发者轻松获取当前登录用户的各种信息。