spring security所谓的全局上下文是如何实现的
时间: 2024-06-07 14:11:44 浏览: 69
spring security demo2
Spring Security 中的全局上下文是通过 SecurityContextHolder 类实现的。SecurityContextHolder 包含一个 SecurityContext 对象,该对象存储了当前用户的身份验证信息,如用户名、权限等。SecurityContextHolder 是一个 ThreadLocal 对象,因此它在当前线程中是唯一的,并且可以被任何代码访问。
在 Spring Security 中,当用户进行身份验证时,身份验证信息会被存储在 SecurityContextHolder 中。在后续的请求中,Spring Security 会从 SecurityContextHolder 中获取用户信息,并验证用户是否有权限进行访问。如果用户没有权限,Spring Security 将抛出 AccessDeniedException 异常。
在 Web 应用程序中,Spring Security 还提供了一个 Filter,即 SecurityContextPersistenceFilter,它负责在请求之间传递 SecurityContext 对象。当用户进行身份验证时,SecurityContextPersistenceFilter 将 SecurityContext 对象存储在 HttpSession 中。在后续的请求中,SecurityContextPersistenceFilter 会从 HttpSession 中获取 SecurityContext 对象,并将其设置到 SecurityContextHolder 中。
总之,Spring Security 的全局上下文是通过 ThreadLocal 对象和 HttpSession 实现的,它能够存储当前用户的身份验证信息,并在整个应用程序中进行共享和访问。
阅读全文