이 글에서는 Spring Security 5와 6의 인증 영속성, 세션 관리에 대한 차이점과 트러블 슈팅을 진행하며 자세히 정리하기 애매했던 내용을 작성해보려고 한다.

아래 내용을 참고하여 작성하였다.

Authentication Persistence and Session Management :: Spring Security

Persisting Authentication :: Spring Security

기본 Filter 구성 변경

Spring Security 6에서는 SecurityContextPersistenceFilterSessionManagementFilter가 기본적으로 설정되지 않도록 변경되었다.

SecurityContextHolderFilter 를 기본 동작으로 선택하게 되었다.

또한, SecurityContextHolderFilter 또는 SecurityContextPersistenceFilter 중 하나만 설정되어야 하며, 두 필터가 동시에 설정되어서는 안된다.

SecurityContextRepository의 명시적 저장

Spring Security 5

Spring Security 5에서는 SecurityContextPersistenceFilter를 사용하여 자동으로 SecurityContext를 SecurityContextRepository에 저장하는 것이 기본 동작이었다.

Untitled

SecurityContextPersistenceFilter 는 SecurityContextRepository을 통해서 요청을 처리하기 전에 복원하는 작업과 응답을 반환하기 전에 SecurityContext에 변경사항이 있다면 자동으로 저장하는 작업을 진행한다.

이 과정에서 불필요한 상황에서도 Session에 SecurityContext를 저장하는 상황이 발생하기도 하며, 요청이 완료되기 전에 SecurityContext의 상태가 변하게 됬을 때 예상치 못한 결과를 가져올 수도 있었다는 문제가 있었다.

Spring Security 6

이러한 문제점을 개선하기 위해 Spring Security 6 부터는 SecurityContextPersistenceFilter를 대체하여 SecurityContextHolderFilter를 기본 동작으로 사용하게 되었다.