java - 尽管无状态 session 管理,Spring 还是添加了一个 JSESSIONID

标签 java spring spring-security

我正在使用具有以下配置的 Web 应用程序的有效 JWT 身份验证:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
      .csrf().disable()
      .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
      .and()
      .exceptionHandling()
      .authenticationEntryPoint(
          (req, rsp, e) -> p.sendError(HttpServletResponse.SC_UNAUTHORIZED))
      .and()
      .addFilter(new UsernamePasswordAuthenticationFilter(authenticationManager(),
          jwtConfig))
      .addFilterAfter(new JwtTokenAuthenticationFilter(jwtConfig),
          UsernamePasswordAuthenticationFilter.class)
      .authorizeRequests()
      .antMatchers(HttpMethod.POST, jwtConfig.getUri()).permitAll()
      .anyRequest().authenticated();
}

SessionCreationPolicy.STATELESS 开始,我预计 Spring 不会自行创建 session 。但是,如果我访问 /login 以外的任何其他资源,我仍然会在响应 header 中看到以下条目:

set-cookie: JSESSIONID=...; Path=/; HttpOnly

有人可以解释这是从哪里来的(也许不是来自 Spring),如果它仍然来自 Spring 需要更改什么?

编辑:

在我的 Controller 中进行测试, session 仍然按照存在的上述标记指示注入(inject)。我仍然不知道这是从哪里来的。

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(HttpSession session) {
    if (session != null) {
        System.out.println("Session is existing"); // executes
    }
}

最佳答案

您当前的配置 (sessionCreationPolicy(SessionCreationPolicy.STATELESS)) 确保 Spring-Security(并且仅 Spring-Security)

  • 不会创建 session
  • 不会依赖 session 来提供身份验证详细信息(例如,提供 Principal)。

您的应用程序的任何其他组件(例如,如果您使用 Spring-Session)仍然可以免费创建 session

关于java - 尽管无状态 session 管理,Spring 还是添加了一个 JSESSIONID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52573539/

相关文章:

java - 如何修复 java.io.InvalidClassException : org. springframework.security.core.context.SecurityContextImpl

java - 为什么在函数外部初始化堆栈比在函数内部初始化堆栈执行得更快?

java - 使用 Google Docs API 下载任何类型的文件

spring - RestyGWT- Spring Rest 服务的自定义 url 映射

java - 自定义 MongoDB spring 数据存储库

java - 如何在Struts 2上应用Spring Security

java - 如何生成具有特定概率密度函数的随机数?

java - 如何登录GAE上部署的GWT应用程序中的gdata?

java - 在 spring 中定义 bean 的更好方法

java - 登录表单 : @RequestMapping cannot handle the POST request