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
- 실행 순서 충돌
- 빈 누락
해결 방법
- SecurityConfig.java 에서 addFilterBdfore() 에 넣는 위치가 정확해야 한다.
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class) - 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