[문제]
react-spring 팀 프로젝트에서는 JWT토큰을 기반으로 기능이 동작하고 있다. 인증 정보가 필요한 구간에서는 인터셉터를 이용하여 토큰 정보로 사용자 정보를 얻고 있는데, SecurityContextHolder에 Auth를 넣는 코드를 작성하고 이상한 버그가 발생하였다.
2번에 한 번 꼴로 계속 구글 로그인 html파일이 응답으로 떨어졌다.
[분석]
Security는 필터안에서 동작하기에 Filter의 로그를 출력해보기로 했다.
다음과 같이 EnableWebSecurity 어노테이션에 debug = true를 설정해주면 로그를 확인할 수 있다.
구글 로그인 html 파일을 리턴 받았을 때도 다음과 같은 필터 체인이 실행되었다. (정상일 때와 같음)
debug = true를 하면 필터 정보 이외에 다음과 같은 정보들도 제공해준다.
확인해보니 맨 윗줄에 session에 대한 정보를 확인했고, SecurityContext도 session에 저장된다는 것을 기억하고 Session에 대해서 검색해보았다.
[해결]
SessionPolicy.STATELESS로 설정을 해주었더니 해결되었다.
기본 값이 IF_REQUIRED인데, 세션에 값을 안넣다가 이 세션에 값을 넣어주니 HttpSession을 만들었고 이것 때문에 구글 로그인과 충돌이 난 것 같다.