【Spring Security】 SecurityContextHolder

Metadata

title: 【Spring Security】 SecurityContextHolder
date: 2023-02-01 19:32
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/SpringSecurity
categories:
  - SpringSecurity
keywords:
  - SpringSecurity
description: 【Spring Security】 SecurityContextHolder

【Spring Security】 SecurityContextHolder

Spring Security 身份验证模型的核心是 SecurityContextHolder(安全上下文持有者),它包含了 SecurityContext(安全上下文)。SecurityContextHolder 是 Spring Security 存储已认证用户详细信息的地方。

可以通过访问 SecurityContextHolder 希望获取认证过的用户信息:

SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
String username = authentication.getName();
Object principal = authentication.getPrincipal();
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();

默认情况下,SecurityContextHolder 使用 ThreadLocal 来存储信息,这意味着 SecurityContext 始终可用于同一线程中,即使 SecurityContext 未显式作为参数传递给这些方法。ThreadLocal 如果在处理当前主体的请求后注意清除线程,则以这种方式使用是非常安全的。Spring Security 的 FilterChainProxy 确保 SecurityContext 始终清除 。