{"id":2189,"date":"2021-07-16T14:23:15","date_gmt":"2021-07-16T05:23:15","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2189"},"modified":"2021-12-05T06:17:11","modified_gmt":"2021-12-04T21:17:11","slug":"swagger-ui-%ed%8f%ac%ed%8a%b8%eb%b6%84%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2189","title":{"rendered":"Swagger-UI \ud3ec\ud2b8\ubd84\ub9ac"},"content":{"rendered":"<h1>Swagger-UI \ud3ec\ud2b8\ubd84\ub9ac<\/h1>\n<p>Swagger-UI \ub294 \uac1c\ubc1c \uc774\ud6c4 \uc81c\uac70\ud558\ub294 \uac83\uc774 \ud655\uc2e4\ud558\uc9c0\ub9cc,<br \/>\n\ud3ec\ud2b8\ub97c \ubd84\ub9ac\ud574\uc11c \uc678\ubd80\uc5d0\uc11c \uc811\uadfc\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ud558\uace0,<br \/>\n\uac1c\ubc1c\uc911\uc5d0\ub294 \ud14c\uc2a4\ud2b8\ub97c \uacc4\uc18d \ud558\ub294 \ubc29\ubc95\ub3c4 \uc788\ub2e4.<\/p>\n<p><a href=\"https:\/\/github.com\/mafor\/swagger-ui-port\">\ucc38\uc870<\/a><\/p>\n<h2>application.yml<\/h2>\n<p>application.yml \uc5d0 \uc544\ub798 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud574\uc900\ub2e4.<\/p>\n<pre><code class=\"language-yaml\">server.port: 8080\nswagger:\n  port: 8088\n  paths: |\n    \/swagger-ui.html,\n    \/webjars\/springfox-swagger-ui\/**\/*,\n    \/swagger-resources,\n    \/swagger-resources\/**\/*,\n    \/v2\/api-docs<\/code><\/pre>\n<h2>TomcatContainerCustomizer.java<\/h2>\n<pre><code class=\"language-java\">@Component\npublic class TomcatContainerCustomizer implements WebServerFactoryCustomizer&lt;TomcatServletWebServerFactory&gt; {\n\n    @Value(&quot;${swagger.port}&quot;)\n    private int swaggerPort;\n\n    @Value(&quot;${swagger.paths}&quot;)\n    private List&lt;String&gt; swaggerPaths;\n\n    @Override\n    public void customize(TomcatServletWebServerFactory factory) {\n\n        Connector swaggerConnector = new Connector();\n        swaggerConnector.setPort(swaggerPort);\n        factory.addAdditionalTomcatConnectors(swaggerConnector);\n    }\n\n    @Bean\n    public FilterRegistrationBean&lt;SwaggerFilter&gt; swaggerFilterRegistrationBean() {\n\n        FilterRegistrationBean&lt;SwaggerFilter&gt; filterRegistrationBean = new FilterRegistrationBean&lt;&gt;();\n        filterRegistrationBean.setFilter(new SwaggerFilter());\n        filterRegistrationBean.setOrder(-100);\n        filterRegistrationBean.setName(&quot;SwaggerFilter&quot;);\n\n        return filterRegistrationBean;\n    }\n\n    private class SwaggerFilter extends OncePerRequestFilter {\n\n        private AntPathMatcher pathMatcher = new AntPathMatcher();\n\n        @Override\n        protected void doFilterInternal(HttpServletRequest httpServletRequest,\n                                        HttpServletResponse httpServletResponse,\n                                        FilterChain filterChain) throws ServletException, IOException {\n\n            boolean isSwaggerPath = swaggerPaths.stream()\n                    .anyMatch(path -&gt; pathMatcher.match(path, httpServletRequest.getServletPath()));\n            boolean isSwaggerPort = httpServletRequest.getLocalPort() == swaggerPort;\n\n            if (isSwaggerPath == isSwaggerPort) {\n                filterChain.doFilter(httpServletRequest, httpServletResponse);\n            } else {\n                httpServletResponse.sendError(404);\n            }\n        }\n    }\n\n    @Bean\n    public WebMvcConfigurer corsConfigurer() {\n        return new WebMvcConfigurer() {\n            @Override\n            public void addCorsMappings(CorsRegistry registry) {\n                \/\/ registry.addMapping(&quot;\/**\/*&quot;).allowedOrigins(&quot;http:\/\/localhost:&quot; + swaggerPort);\n                registry.addMapping(&quot;\/*\/*&quot;).allowedOrigins(&quot;http:\/\/localhost:&quot; + swaggerPort);\n            }\n        };\n    }\n}<\/code><\/pre>\n<h2>SwaggerConfig<\/h2>\n<pre><code class=\"language-java\">@Configuration\n@EnableSwagger2\npublic class SwaggerConfig {\n\n    @Value(&quot;${server.port}&quot;)\n    private int serverPort;\n\n    @Bean\n    public Docket api() {\n\n        ParameterBuilder parameterBuilder = new ParameterBuilder();\n        List&lt;Parameter&gt; parameters = new ArrayList&lt;&gt;();\n\n        parameterBuilder\n                .name(&quot;X-Authorization&quot;)\n                .modelRef(new ModelRef(&quot;string&quot;))\n                .parameterType(&quot;header&quot;)\n                .required(false)\n                .build();\n        parameters.add(parameterBuilder.build());\n\n        return new Docket(DocumentationType.SWAGGER_2)\n                .host(&quot;localhost:&quot; + serverPort)\n                .globalOperationParameters(parameters)\n                .select()\n                .apis(RequestHandlerSelectors.any())\n                .paths(PathSelectors.ant(&quot;\/v1\/**&quot;))\n                .build();\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Swagger-UI \ud3ec\ud2b8\ubd84\ub9ac Swagger-UI \ub294 \uac1c\ubc1c \uc774\ud6c4 \uc81c\uac70\ud558\ub294 \uac83\uc774 \ud655\uc2e4\ud558\uc9c0\ub9cc, \ud3ec\ud2b8\ub97c \ubd84\ub9ac\ud574\uc11c \uc678\ubd80\uc5d0\uc11c \uc811\uadfc\ud558\uc9c0 \ubabb\ud558\ub3c4\ub85d \ud558\uace0, \uac1c\ubc1c\uc911\uc5d0\ub294 \ud14c\uc2a4\ud2b8\ub97c \uacc4\uc18d \ud558\ub294 \ubc29\ubc95\ub3c4 \uc788\ub2e4. \ucc38\uc870 application.yml application.yml \uc5d0 \uc544\ub798 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud574\uc900\ub2e4. server.port: 8080 swagger: port: 8088 paths: | \/swagger-ui.html, \/webjars\/springfox-swagger-ui\/**\/*, \/swagger-resources, \/swagger-resources\/**\/*, \/v2\/api-docs TomcatContainerCustomizer.java @Component public class TomcatContainerCustomizer implements WebServerFactoryCustomizer&lt;TomcatServletWebServerFactory&gt; { @Value(&quot;${swagger.port}&quot;) private int swaggerPort; @Value(&quot;${swagger.paths}&quot;) private List&lt;String&gt;\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2189\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-2189","post","type-post","status-publish","format-standard","hentry","category-spring-boot-2-1"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2189"}],"version-history":[{"count":5,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2189\/revisions"}],"predecessor-version":[{"id":4073,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2189\/revisions\/4073"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}