[Spring] 스프링부트 3, 스프링 시큐리티 6, 로그인 세션 유지, 로그인 풀림

1. 문제 상황

스프링 부트 3, 스프링 시큐리티 6 업데이트가 되며 기존에 사용 중인 WebSecurityConfigurerAdapter를 더 이상 지원하지 않기에

기존의 WebSecurityConfigurerAdapter를 상속받아 기능을 구현하는 대신 컴포넌트화 시켜서 구현해야한다.

SecurityFilterChain으로 스프링 시큐리티를 구현 중

(antMacher -> requestMacher, dispatcherTypeMatcher설정 등 기본 Spring Security6.0 마이그레이션 가이드는 적용 완료

https://docs.spring.io/spring-security/reference/5.8/migration/index.html)

 

Preparing for 6.0 :: Spring Security

The first step is to ensure you are the latest patch release of Spring Boot 2.7. Next, you should ensure you are on the latest patch release of Spring Security 5.8. If you are using Spring Boot, you will need to override the Spring Boot version from Spring

docs.spring.io

SecurityContext에 로그인 시도 시 정상적으로 인증정보를 바인딩하고 있으나, 페이지 이동 시 인증정보가 없어지는 현상 발생

2. 해결

SecurityContextPersistenceFilter

SecurityContext의 영속성을 컨트롤하는 SecurityContextPersistenceFilter의 설정이 누락되어 있었다. 

SecurityContext의 영속화는 SecurityContextRepository를 통해 이루어지며 SecurityContextHolder에 SecurityContext를 넣어 요청 전반에 걸쳐 SecurityContext를 사용할 수 있도록 해준다.

 

따라서 HttpSecurity에 SecurityContextPersistenceFilter 설정을 추가해 주면 정상적으로 로그인 세션이 유지된다.

.addFilterBefore(new SecurityContextPersistenceFilter(), BasicAuthenticationFilter.class)

 

 

* 마이그레이션 전부터 세션유지시간이 커스텀 되어 있었기에 이번 케이스와는 별개지만, SecurityContextPersistenceFilter가 정상적으로 설정되어 있는데도 로그인 메서드 내에서는 정상적으로 인증정보가 등록되지만, 얼마 지나지 않아 풀린다면 스프링시큐리티 세션 시간, 혹은 세션 생성 설정을 확인해봐야 할 수도 있다.

https://docs.spring.io/spring-security/site/docs/4.0.x/apidocs/org/springframework/security/config/http/SessionCreationPolicy.html

 

SessionCreationPolicy (Spring Security 4.0.4.RELEASE API)

NEVER Spring Security will never create an HttpSession, but will use the HttpSession if it already exists

docs.spring.io