【问题标题】:Is required SecurityContextHolder in JWT Authentication App?JWT 身份验证应用程序中是否需要 SecurityContextHolder?
【发布时间】:2018-02-02 20:13:53
【问题描述】:

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

这里有 2 个类正在使用它:

AuthenticationRestController.java

JwtAuthenticationTokenFilter.java

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

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

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

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

感谢您的回答。

【问题讨论】:

  • 建议你看看官方的spring security jwt项目,spring-security-jwt
  • 它不是只适用于 oauth2 吗?
  • 哎呀,是的,你是对的,它不是自己的项目,哎呀。它是spring-security-oauth2 项目的一部分。有什么理由不想使用 oauth2?它是高度可定制的
  • 我知道,但我只需要 jwt 令牌

标签: java spring spring-security jjwt


【解决方案1】:

这是来自Learning Spring 5.0的引用:

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

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

何时使用 SessionCreationPolicy.STATELESS

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

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

【讨论】:

  • 所以在我的情况下,我可以继续删除,因为没用,对吧?
  • 是的,如果打算停止创建/使用会话。
猜你喜欢
  • 2019-05-08
  • 2020-07-25
  • 1970-01-01
  • 2019-10-21
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 2020-11-06
相关资源
最近更新 更多