지난번 Spring Security와 Swagger 연동 중 버전 이슈를 해결한 경험이 있었지만,
이번에는 추가로 Spring Security의 SecurityContext 처리 문제와
springdoc-openapi의 내부 API 충돌까지 발생하여, 전체 설정 과정을 다시 정리해 보았습니다.
WARN ... SecurityExceptionHandler : Authentication failed: An Authentication object was not found in the SecurityContext
이 오류는 다음 조건에서 발생합니다:
SecurityContextHolder에서 인증 정보를 찾지 못할 경우.authenticationEntryPoint()에 등록된 SecurityExceptionHandler가 동작함Swagger UI는 보안 필터를 우회해야 하지만, 초기 설정에서 JWT 필터에 의해 걸리며 인증이 요구되었기 때문에 이 오류가 발생했습니다.
jakarta.servlet.ServletException: Handler dispatch failed:
java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.<init>(java.lang.Object)'
이 오류는 Swagger 문서(/v3/api-docs)를 호출했을 때 발생했으며,
결과적으로 Swagger UI에서는 다음과 같은 500 오류와 함께 동작하지 않았습니다:
Fetch error: response status is 500 /v3/api-docs
이 에러는 springdoc-openapi가 사용하는 내부 Spring API가 Spring Boot 최신 버전과 맞지 않을 때 발생합니다.
SecurityContext에 인증 객체(Authentication)를 저장하고 검증합니다.SecurityContext가 비어 있었고,Authentication object was not found 예외가 발생한 것입니다.ControllerAdviceBean.<init>(Object)는 Spring Framework 6.1 이상에서 시그니처가 변경된 생성자입니다.springdoc-openapi 2.5.0은 해당 변경을 반영하지 못해 NoSuchMethodError가 발생GlobalSecurityConfig.java
/domain/**, /swagger-ui/**, /webjars/**, /swagger-ui.html, /v3/api-docs/**)를 모두 permitAll()로 설정GlobalSecurityContextFilter.java
shouldNotFilter() 내부에서 Swagger 관련 경로는 JWT 필터 제외 대상에 추가RootController.java
/) 요청 시 Swagger UI(/domain/api-docs.html)로 리디렉션 처리springdoc 버전 업그레이드
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.8'
/domain/api-docs.html → Swagger UI 메인/v3/api-docs/** → OpenAPI JSON 문서/swagger-ui/** → Swagger 리소스/webjars/** → UI CSS/JS 의존성/ → Swagger로 리디렉션/v3/api-docs 500 오류 해결springdoc-openapi는 Spring 내부 API 변경에 민감하므로, 항상 공식 호환 버전 확인 필수