spring security所谓的全局上下文是如何实现的?
时间: 2023-02-18 12:07:19 浏览: 50
Spring Security的全局上下文实现是通过使用ThreadLocal来实现的,它可以在当前线程中记录当前用户的身份信息,以及当前线程中的请求和响应信息。这样,在应用程序的各个部分中,就可以获取到当前用户的身份信息,以及当前请求和响应的信息。
相关问题
springsecurity6.1存放上下文
Spring Security 6.1中的上下文存储在SecurityContextHolder类中。SecurityContextHolder是一个用于存储和访问当前用户的安全上下文的工具类。它提供了静态方法来获取和设置当前的SecurityContext对象。
以下是一个示例演示如何在Spring Security 6.1中存储上下文:
```java
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.context.SecurityContext;
// 存储上下文
SecurityContext context = SecurityContextHolder.createEmptyContext();
// 设置当前用户的认证信息
context.setAuthentication(authentication);
// 将上下文存储到SecurityContextHolder中
SecurityContextHolder.setContext(context);
// 获取上下文
SecurityContext storedContext = SecurityContextHolder.getContext();
// 获取当前用户的认证信息
Authentication authentication = storedContext.getAuthentication();
```
在上面的示例中,我们首先创建一个空的SecurityContext对象,然后设置当前用户的认证信息,并将上下文存储到SecurityContextHolder中。然后,我们可以使用SecurityContextHolder.getContext()方法来获取存储的上下文,并使用getAuthentication()方法来获取当前用户的认证信息。
springsecurity 上下文
Spring Security的上下文是指在应用程序中管理和传递安全信息的机制。在Spring Security中,有几种策略可以用于管理安全上下文。
一种常用的策略是MODE_THREADLOCAL,它是Spring Security默认的上下文管理策略。使用这种策略,Spring Security使用ThreadLocal来管理上下文。ThreadLocal确保每个线程只能访问自己线程中的ThreadLocal中的数据,其他线程无法访问。在身份验证过程结束后,可以使用静态的SecurityContextHolder.getContext()方法从持有者请求安全上下文。从安全上下文中,可以进一步获取Authentication对象,该对象存储着已验证实体的详细信息。例如,可以通过以下代码获取已认证用户的用户名:
@GetMapping("/hello")
public String hello(){
SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
return "Hello," + authentication.getName() + "!";
}
另一种策略是DelegatingSecurityContextCallable,它可以将安全上下文传递给新线程。通过使用DelegatingSecurityContextCallable装饰任务,可以确保新线程也能够访问安全上下文。
总之,Spring Security提供了多种策略来管理和传递安全上下文,以确保安全信息在应用程序中得到正确处理和传递。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* *2* *3* [SpringSecurity(八)--SecurityContext安全上下文](https://blog.csdn.net/qq_44754515/article/details/127406789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]