본문 바로가기
오류

Spring Security의 Security Context 덮여지는 오류

by greenyellow-s 2025. 6. 19.
728x90

문제

securityContext 설정이 정상적으로 완료 됐는데 그 이후에 다시 익명 사용자로 덮어써서 오류 발생

 

 


원인 분석

[로그인]
↓
[토큰 발급]
↓
[api 호출] ⇢ [인증이 완료된 사용자만 접근 가능한 API]
↓
[SecurityContextPersistenceFilter]
↓
[JWTAuthenticationFilter] ⇢ [내가 만든 필터 파일]
↓
[AnonymousAuthenticationFilter] ⇠ 여기서 인증 없으면 익명으로 설정

 

 

인증이 있는데도 익명으로 다시 덮어씌워서 오류 발생 403 Forbidden 이유

오류 Debug
web.FilterChainProxy        : Securing GET /auth/test
SecurityContextPersistenceFilter : Set SecurityContextHolder to empty SecurityContext
AnonymousAuthenticationFilter  : Set SecurityContextHolder to anonymous SecurityContext
web.FilterChainProxy        : Secured GET /auth/test
SecurityContextPersistenceFilter : Cleared SecurityContextHolder to complete request
  1. 실행 순서 충돌
  2. 빈 누락

 


해결 방법

  1. SecurityConfig.java 에서 addFilterBdfore() 에 넣는 위치가 정확해야 한다.
    .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)
  2. JWTAuthenticationFilter.java에 @Component와 @Order가 함께 쓰이면 충돌이 날 수 있고 그럼 실행 순서가 엉킬 수 있다.

 

 

 

난 @Order 를 삭제하니 해결..

 

 

 

드디어 해결 완료.. ㅠㅜ

security.web.FilterChainProxy        : Securing GET /test
filter.JWTAuthenticationFilter   : isToken: true
filter.JWTAuthenticationFilter   : securityContext: UsernamePasswordAuthenticationToken [Principal=UserPrincipal{userId='test', userLevel=USER, activeYn=Y, authorities=[ROLE_USER], accountNonExpired=true, accountNonLocked=true, credentialsNonExpired=true, enabled=true}, Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]
security.web.FilterChainProxy        : Secured GET /test
controller.TestController        : /test : UsernamePasswordAuthenticationToken [Principal=UserPrincipal{userId='test', userLevel=USER, activeYn=Y, authorities=[ROLE_USER], accountNonExpired=true, accountNonLocked=true, credentialsNonExpired=true, enabled=true}, Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]
728x90