TroubleShooting
발생한 문제
스웨거 세팅을 했으나 Spring Security 필터로 인하여 스웨거 화면이 뜨지 않는 현상 발견.
해결 및 시도 방법
1. 먼저, h2-console을 확인할 때도 비슷한 경험이 있었기에 HTTP frame option 관련인지 확인.
- 하지만, h2-console 때문에 이미 설정했으므로 문제 없다고 판단.
2. 다른 리소스들이 들어오지 않아 그림을 못그리는 것인지 확인하기 위해 개발자 콘솔을 확인.
- localhost:8080/webjars 관련이 못들어오는 것을 확인.
- 스웨거 리소스가 webjars에만 있을 것 같지 않아 스웨거 리소스에 대한 정보를 얻기 위해 구글링 시작함.
- 관련 키워드로 구글링 -> `swagger security filter`
- 스택 오버플로우에 비슷한 내용의 글을 확인하였고 적용함.
How to configure Spring Security to allow Swagger URL to be accessed without authentication
My project has Spring Security. Main issue: Not able to access swagger URL at http://localhost:8080/api/v2/api-docs. It says Missing or invalid Authorization header. Screenshot of the browser win...
stackoverflow.com
세부사항 변화
기존
기존에는 단순히 swagger-ui.html로 접근하는 url만 해제하였으나 관련 리소스들이 들어오지 않는 것을 확인하여 다른 리소스 주소도 풀어주었다.
.authorizeRequests()
.requestMatchers(request -> CorsUtils.isPreFlightRequest(request)).permitAll()
.antMatchers("/h2-console/**").permitAll() //h2-console 해제
.antMatchers("/swagger-ui.html").permitAll() //swagger 해제
.antMatchers("/api/signup").permitAll() //signup 해제
.antMatchers("/api/login").permitAll() //login 해제
.anyRequest().authenticated()
수정
swagger 관련 url 해제
.antMatchers("/swagger-ui.html",
"/v2/api-docs",
"/configuration/security",
"/configuration/ui",
"/swagger-resources/**",
"/webjars/**").permitAll()
결과
추가 이슈
basic-error-controller 가 보여서 따로 apis에 any 옵션이 아닌 controller 패키지를 명시해줌.
@Bean
public Docket commonApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()//apis, paths를 사용하주기 위한 builder
.apis(RequestHandlerSelectors.basePackage("com.clonecode.inssagram.controller")) // 특정 패키지경로를 API문서화 한다. 1차 필터
.paths(PathSelectors.any()) // apis중에서 특정 path조건 API만 문서화 하는 2차 필터
.build()
.groupName("API 0.0.1")//빈설정에 대한 그루핑을 한 그룹에 대한 구분자 값 설정.
.apiInfo(this.apiInfo())//스웨거 설명
.useDefaultResponseMessages(false); // 400,404,500 .. 표기를 ui에서 삭제한다.
}
회고
이번 트러블 슈팅은 첫 security 과제에서 h2-console 을 사용하기 위해 겪었던 트러블과 유사해 비교적 쉽게 정리하여 해결하였다.
시간을 절약했고, 빠르게 개발을 시작해야겠다.
'Troubleshooting' 카테고리의 다른 글
[Issue] Gradle implementation 작성시 주의할 점 (0) | 2023.04.21 |
---|---|
TroubleShooting: warning: unknown enum constant When.MAYBE (0) | 2023.03.10 |
Spring JPA - Cascade 문제 처리 (0) | 2022.08.18 |
Spring CORS 세팅 - addAllowedOriginPattern, isPreFlightRequest 관련 문제 (0) | 2022.08.17 |
Controller - 같은 엔드포인트를 파라미터에 따라 나눠쓰기 (0) | 2022.08.15 |