이 글에서는 Spring Security 5와 6의 인증 영속성, 세션 관리에 대한 차이점과 트러블 슈팅을 진행하며 자세히 정리하기 애매했던 내용을 작성해보려고 한다.
아래 내용을 참고하여 작성하였다.
Authentication Persistence and Session Management :: Spring Security
Persisting Authentication :: Spring Security
Spring Security 6에서는 SecurityContextPersistenceFilter
와 SessionManagementFilter
가 기본적으로 설정되지 않도록 변경되었다.
SecurityContextHolderFilter
를 기본 동작으로 선택하게 되었다.
또한, SecurityContextHolderFilter
또는 SecurityContextPersistenceFilter
중 하나만 설정되어야 하며, 두 필터가 동시에 설정되어서는 안된다.
Spring Security 5에서는 SecurityContextPersistenceFilter
를 사용하여 자동으로 SecurityContext를 SecurityContextRepository에 저장하는 것이 기본 동작이었다.
SecurityContextPersistenceFilter
는 SecurityContextRepository을 통해서 요청을 처리하기 전에 복원하는 작업과 응답을 반환하기 전에 SecurityContext에 변경사항이 있다면 자동으로 저장하는 작업을 진행한다.
이 과정에서 불필요한 상황에서도 Session에 SecurityContext를 저장하는 상황이 발생하기도 하며, 요청이 완료되기 전에 SecurityContext의 상태가 변하게 됬을 때 예상치 못한 결과를 가져올 수도 있었다는 문제가 있었다.
이러한 문제점을 개선하기 위해 Spring Security 6 부터는 SecurityContextPersistenceFilter
를 대체하여 SecurityContextHolderFilter
를 기본 동작으로 사용하게 되었다.