지난번 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 변경에 민감하므로, 항상 공식 호환 버전 확인 필수