새소식

반응형
Java/Spring

[Spring Security] Cannot create a session after the response has been committed (세션 에러)

  • -
반응형

Spring Security 설정 시 Session 생성에 관해 궁금하여 작성하게 되었다.

 

Spring Security는 csrf 가 기본적으로 enable() 설정되어 있다.

매번 csrf 설정을 disable() 설정 하다보니 자동으로 Session이 생성되어 있고 서버와 통신할 때

CSRF 토큰값을 확인하지 않아 특정 에러가 발생하는걸 발견하지 못했다.

 

하지만 csrf 설정을 하다가 에러를 발견했다.

본인은 특정 게시판을 만드는데 로그인을 하지 않았을땐 메인페이지가 떠야하나 위와 같은 에러가 발생했다.

모든 요청(ajax) 에 대해 csrf 값을 체크하는데 세션이 존재하지 않아 뜨는듯한 느낌이였다.

 

일단 Spring 에서의 HttpSession 은 누가 생성하는가 봤더니 서블릿 컨테이너가 생성한다고 한다.

보통 우리가 session 을 사용하기 위해 호출할때는 HttpServletRequest 의 .getSession(true) 또는 HttpSession 객체를

사용했다.

 

서블릿 컨테이너(WAS)는 사용자의 HttpRequest 요청에 의해 HttpServletRequest Response 객체를

생성해 서블릿을 생성한다. (이미 생성한 서블릿이 메모리에 있는지 확인한 후 생성한다.)

 

내가 요청한 contextPath/main 에는 따로 세션을 생성하는 문장이 빠져있어 session 생성이 안되어 에러가 났다.

일단 급한대로 controller 메서드에 HttpSession session 을 생성했더니 생성되는걸 확인할 수 있었다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.