0

我正在 Spring Boot 中开发应用程序,我需要在那里进行 jwt 身份验证。我决定使用那个 github 项目,但是当我查看代码时,我不明白 SecurityContextHolder 的含义。

以下是使用它的 2 个类:

AuthenticationRestController.java

JwtAuthenticationTokenFilter.java

你能告诉我 SecurityContextHolder 的目的是什么吗?我想要没有会话的无状态身份验证。所以我只需要生成 jwt 并在请求之前检查它。

这个 git 项目也有禁用会话:

...
httpSeccurity.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
...

我已经尝试使用 SecurityContextHolder 删除代码,并且应用程序仍然可以正常工作。

感谢您的回答。

4

1 回答 1

1

这是Learning Spring 5.0的引述:

安全性的一个主要方面是存储应用程序当前使用的主体信息。它由应用程序的安全上下文保存。SecurityContextHolder是框架中最重要的对象,因为它将有关安全上下文的详细信息存储在ThreadLocal中。这意味着安全上下文将可用于在同一线程中执行的方法。但是,在少数情况下,应用程序中的所有线程可能需要使用其他策略来使用安全上下文。该框架提供了两种方法来更改使用ThreadLocal的默认性质。开发人员可以设置系统属性,也可以调用SecurityContextHolder上的静态方法。

使用SecurityContextHolder删除代码后您的应用程序仍然可以工作的原因是,通过使用SessionCreationPolicy.STATELESS创建策略,您请求 Spring Security 不创建 HTTP 会话并且不在会话中存储登录用户的SecurityContext

何时使用SessionCreationPolicy.STATELESS

  • 在应用程序的整个生命周期内停止创建会话

  • 在应用程序的整个生命周期内停止使用会话

于 2018-02-02T11:54:18.920 回答