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

时间:2018-02-02 11:39:23

标签: java spring spring-security jjwt

我在Spring Boot中开发应用程序,我需要jwt身份验证。我决定使用那个github项目,但是当我查看代码时,我不理解SecurityContextHolder。

以下是使用它的2个类:

AuthenticationRestController.java

JwtAuthenticationTokenFilter.java

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

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

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

我尝试使用SecurityContextHolder删除代码,应用程序仍能正常运行。

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

以下是Learning Spring 5.0的引用:

  

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

使用SecurityContextHolder删除代码后应用程序仍然有效的原因是,使用SessionCreationPolicy.STATELESS创建策略,您要求Spring Security不创建HTTP会话而不存储登录用户的{{3}在会议中。

何时使用 SessionCreationPolicy.STATELESS

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

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