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 을 생성했더니 생성되는걸 확인할 수 있었다.