Java JWT身份验证应用程序中是否需要SecurityContextHolder?

Java JWT身份验证应用程序中是否需要SecurityContextHolder?,java,spring,spring-security,jjwt,Java,Spring,Spring Security,Jjwt,我正在用SpringBoot开发应用程序,我需要jwt认证。我决定使用那个github项目,但当我看代码时,我不理解SecurityContextHolder的含义 下面是使用它的两个类: 你能告诉我SecurityContextHolder的目的是什么吗?我想要没有会话的无状态身份验证。所以我只需要生成jwt,然后在请求之前检查它 此git项目还具有禁用会话: ... httpSeccurity.sessionManagement().sessionCreationPolicy(Sessi

我正在用SpringBoot开发应用程序,我需要jwt认证。我决定使用那个github项目,但当我看代码时,我不理解SecurityContextHolder的含义

下面是使用它的两个类:

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

此git项目还具有禁用会话:

...
httpSeccurity.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
...
我尝试过使用SecurityContextHolder删除代码,应用程序仍然可以正常工作

感谢您的回答。

以下是对以下内容的引用:

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

应用程序在删除代码后仍能工作的原因是,通过使用创建策略,您请求Spring Security不要创建HTTP会话,也不要在会话中存储登录的用户

何时使用SessionCreationPolicy.STATELESS

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

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


因此,在我的情况下,我可以保留删除,因为它是无用的,对吗?是的,如果目的是停止创建/使用会话。我建议你看看官方的spring security jwt项目,
spring security jwt
它不是只与oauth2一起工作吗?哦,是的,你是对的,它不是自己的项目,哦。它是
spring-security-oauth2
项目的一部分。你有什么理由不想使用oauth2吗?这是高度定制,我知道,但我只需要jwt令牌