이번에 프로젝트에 Swagger-ui를 적용하였다. 관련 링크는 아래 참고
[Spring] Spring 프로젝트에 Swagger-ui 설치 및 적용하는 방법 ( feat. 전자정부프레임워크 )
그런데 막상 실행하니 다음과 같은 문제가 발생하였다.
문제발생
URL을 통해 스웨거를 확인하려니 다음과 같은 팝업이 뜨며 접속이 되지 않는 것이었다.
Unable to infer base url.
This is common when using dynamic servlet registration or when the API is behind an API Gateway.
The base url is the root of where all the swagger resources are served.
For e.g. if the api is available at http://example.org/api/v2/api-docs then
the base url is http://example.org/api/. Please enter the location manually:
문제파악
우선 문제를 파악하기 위해서 개발자도구에서 네트워크 상태를 확인해보았다.
보니까. 뭔가 html, css, js등을 잘 가져온다. 근데 맨 아래에 404가 뜬다..
구글링을 해보니, Spring Security에서 불특정 도메인의 access를 차단한다는 글을 보고
스프링 시큐리티에서 막는건가? 라는 생각이 들었다.
근데 문제는 우리 프로젝트는 스프링 시큐리티가 적용되지 않았기 때문에 논외였다..
그래서 스프링 시큐리티만 줄창 보다가 결국 옆팀의 친구에게 도움을 구했다.
문제해결
옆팀의 친구와 같이 보던 중, 결론은 localhost:5049/sjmp/swagger-ui.html이라는 도메인이
차단 당한 것 같다고 이야기가 모아졌고. 한시간 정도 같이 보다가 문제원인을 찾았다.
바로 web.xml에서 <url-pattern>을 정의하는데 여기서 .do만 접근되도록 설정이 되어 있었기 때문이다.
그래서 아래와 같이 수정해주었다.
변경전
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
변경후
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
<url-pattern>/swagger-resources/configuration/ui</url-pattern>
<url-pattern>/swagger-resources/configuration/security</url-pattern>
<url-pattern>/swagger-resources</url-pattern>
<url-pattern>/v2/api-docs</url-pattern>
</servlet-mapping>
이렇게 변경을 하고 나니 정상적으로 접근이 된다.
만약 본인이 Spring Security를 사용하는 프로젝트면 우선 그 부분을 보면 될 것 같다..
스웨거 도메인에 접근 될 수 있도록 permit만 해주면 된다. 끝
'JAVA' 카테고리의 다른 글
[Spring] Spring 프로젝트에 Swagger-ui 설치 및 적용하는 방법 ( feat. 전자정부프레임워크 ) (0) | 2023.12.09 |
---|---|
[JAVA] JSONObject/JSONArray/JSONParser 사용방법 : json-simple 라이브러리 (0) | 2022.09.13 |
[JAVA] 자바(JAVA)에서 JSONObject안의 원하는 데이터를 추출하는 방법 (0) | 2022.09.12 |
[JAVA] 자바(JAVA) : XML데이터에서 name 속성값으로 원하는 데이터값을 추출하는 방법 (0) | 2022.09.12 |
[JAVA] 자바(JAVA) : XML데이터에서 원하는 태그(Tag)의 데이터값을 추출하는 방법 (0) | 2022.09.12 |