Spring添加了一个JSESSIONID,尽管没有状态的会话管理

2022-09-03 07:38:59

我正在使用具有以下配置的 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/login

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

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

编辑:

在我的控制器中进行测试时,会话仍会注入,如上述令牌所示。我仍然不知道这是从哪里来的。

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

答案 1

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

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

应用程序的任何其他组件(例如,如果您要使用 Spring-Session)仍然可以自由创建会话


答案 2

尝试在应用程序中将会话设置为 none。yml:

spring.session.store-type=none

如文档中所述:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-session.html


推荐