복붙노트

[SPRING] Spring은 상태 비 저장 세션 관리에도 불구하고 JSESSIONID를 추가한다.

SPRING

Spring은 상태 비 저장 세션 관리에도 불구하고 JSESSIONID를 추가한다.

다음 구성으로 내 웹 응용 프로그램의 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이 세션 자체를 생성하지 않을 것으로 예상하고 있습니다. 그러나 / 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. ==============================

    1.현재 설정 (sessionCreationPolicy (SessionCreationPolicy.STATELESS))은 Spring 보안 (스프링 보안 만)

    현재 설정 (sessionCreationPolicy (SessionCreationPolicy.STATELESS))은 Spring 보안 (스프링 보안 만)

    응용 프로그램의 다른 구성 요소 (예 : Spring-Session을 사용하는 경우)는 자유롭게 세션을 만들 수 있습니다.

  2. from https://stackoverflow.com/questions/52573539/spring-adds-a-jsessionid-despite-stateless-session-management by cc-by-sa and MIT license