본문 바로가기
Issue/Server

[Spring Security] 인증 후 인가 SecurityContext 영속성 유지 안됨 문제

by chickenman 2025. 5. 25.

1. 현상


인증의 영속성을 유지하기 위해서 세션을 활용하려고 하였다.

그리고 아래와 같이 https://docs.spring.io/spring-security/reference/servlet/authentication/persistence.html 가이드에 맞게 코드를 작성하였다. 

그런데 로그인 이후에 다른 API를 호출하여도 인증의 영속성이 유지되지 않았고 403 Forbidden 오류가 떨어졌다.

<문제의 코드>

 

2. 원인


SecurityContextConfigurer 설정 클래스에서는 기본적으로 개발자가 수동으로 SecurityContext를 저장하도록 설정되어 있다.

그렇기 때문에, 각 Request마다 SecurityContext를 저장하는 코드를 작성하지 않아서 영속성이 유지되지 않았던 현상이었다.

 

3. 해결


이 문제를 해결하기 위해서는

1. 직접 인증 성공 시 SecurityContext를 저장하고 코드를 작성해주거나

2. ttpSecurity를 활용한 securityContext 설정에서 .requireExplicitSave(false)를 호출해줌으로써 해결 가능하다.

 

나는 2번 항목을 선택하여 최종적으로 아래와 같은 설정 코드를 작성하였고 성공적으로 영속성을 유지할 수 있었다.


그리고 AbstractAuthenticationProcessingFilter를 활용하여 Rest API를 활용한 인증 필터를 작성했을 수 있다. 

그런 경우 AbstractAuthenticationProcessingFilter에서 제공해주는 setSecurityContextRepository를 활용하면 된다.

 

이 메서드를 설정하면 인증 성공 시 SecurityContext를 저장할 SecurityContextRepository를 설정할 수 있다. 

이후 인증 성공 시 Spring Security은 명시적으로 SecurityContext를 저장하는 코드를 활용함으로써 SecurityContext를 저장한다.

 

이 방식을 활용했을 때 내가 만든 최종적인 코드의 형태는 아래와 같다.

 

4. 공부하게 된 점


- 시간이 오래 걸린다고 느껴지지만 공식 문서와 소스 코드를 보는 것이 트러블 슈팅에 있어서 가장 빠른 시간이다!

 

 

출처


https://docs.spring.io/spring-security/reference/servlet/authentication/persistence.html

https://www.inflearn.com/courses/lecture?courseId=333154&type=LECTURE&unitId=208637&tab=curriculum&category=questionDetail&q=1242290&subtitleLanguage=ko