首页 > 解决方案 > 如何在生产中禁用 swagger-ui(Thorntail)?

问题描述

我有一个使用 Wildfly Swarm(现为 Thorntail)构建的应用程序,并且我已将 Swagger 与我的 REST API 集成以获取文档,并使用它来测试 Swagger-UI。

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

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

我看到了很多建议,但它们似乎是针对 Spring Boot 的,比如这个你如何在生产中关闭 swagger-ui

标签: jakarta-eeswaggerswagger-uiwildfly-swarmthorntail

解决方案


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

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

请参阅以下示例以实现从Java Web 应用程序上的 CORS 问题复制的 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>

推荐阅读