Search code examples
spring-bootswagger-uispringfox

Springfox - change path of swagger-ui


now swagger is served from http://localhost:8080/myContextRoot/swagger-ui.html

Can I configure swagger and its resources to be served under http://localhost:8080/myContextRoot/swagger/swagger-ui.html

thank you for your help!


Solution

  • I've followed this approach:

    Dependency:

    implementation 'org.tuckey:urlrewritefilter:4.0.4'
    

    UrlRewrite Class:

    @Component
    public class SwaggerUrlRewriteFilter extends UrlRewriteFilter {
      private static final String CONFIG_LOCATION = "/urlrewrite.xml";
    
      @Value("classpath:/urlrewrite.xml")
      private Resource resource;
    
      @Override
      protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
        try {
          //Create a UrlRewrite Conf object with the injected resource
          Conf conf = new Conf(filterConfig.getServletContext(), resource.getInputStream(), resource.getFilename(), "@@yourOwnSystemId@@");
          checkConf(conf);
        } catch (IOException ex) {
          throw new ServletException("Unable to load URL rewrite configuration file from " + CONFIG_LOCATION, ex);
        }
      }
    }
    

    and in the resource folder urlrewrite.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
            "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
    <urlrewrite>
        <rule>
            <from>/swagger/swagger-ui.html</from>
            <to type="passthrough">/swagger-ui.html</to>
        </rule>
    
        <rule>
            <from>/swagger/webjars/(.*)</from>
            <to type="passthrough">/webjars/$1</to>
        </rule>
    
        <rule>
            <from>/swagger/v2/api-docs</from>
            <to type="passthrough">/v2/api-docs</to>
        </rule>
    
        <rule>
            <from>/swagger/configuration/(.*)</from>
            <to type="passthrough">/configuration/$1</to>
        </rule>
    
        <rule>
            <from>/swagger/swagger-resources</from>
            <to type="passthrough">/swagger-resources</to>
        </rule>
    </urlrewrite>
    

    after that the path to swagger is:

    http://localhost:8080/myContextRoot/swagger/swagger-ui.html