如何在生产(Thorntail)中禁用swagger-ui?

时间:2019-02-13 15:57:08

标签: java-ee swagger swagger-ui wildfly-swarm thorntail

我有一个使用Wildfly Swarm(现在为Thorntail)构建的应用程序,并且已将Swagger与我的REST API集成在一起进行文档编制,并且还使用它来与Swagger-UI进行测试。

我想知道在生产环境中部署应用程序时是否可以禁用Swagger-UI部分。我试图查看招摇的文档,以查看是否有任何此属性,但找不到任何属性。在Thorntail文档中也是如此。

一种可能的解决方案是在构建jar时通过maven配置文件禁用swagger-ui maven依赖关系。我想避免这种情况,因为那时我必须要有一个罐子用于生产,一个罐子用于开发。

我看到了很多建议,但它们似乎是针对Spring Boot的,例如How do you turn off swagger-ui in production

1 个答案:

答案 0 :(得分:0)

我建议您托管一个自己的swagger-ui实例,而不要在thorntail中使用它,因为我认为swagger-ui是一种开发工具,我不会直接在thorntail服务中使用。

如果swagger-ui作为外部独立服务托管,并且只需要html和javascript就可以为所有开发人员安装一个,那么您只需关心提供* /的端点的服务中的CORS。 swagger.json。在生产环境中提供swagger.json不会有问题,因为它只是您的其余api的文档。

请参见以下示例,以实现从CORS issue on java web application复制的CORS过滤器

public class CorsFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, HEAD, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
      if ("OPTIONS".equalsIgnoreCase((HttpServletRequest) servletRequest.getMethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
      } else {
         filterChain.doFilter(servletRequest, response);
      }

    }

    @Override
    public void destroy() {

    }
}               

在这里,您将了解如何启用servlet过滤器。

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/swaggerJsonEndpoint/*</url-pattern>
</filter-mapping>