我有一个使用Wildfly Swarm(现在是Thorntail)构建的应用程序,我已将Swagger与我的REST API集成用于文档,并使用它来测试Swagger-UI。
我想知道在生产环境中部署应用程序时是否可以禁用Swagger-UI部分。我试着查看swagger文档,看看是否有任何属性,但找不到任何属性。 Thorntail文档中的内容相同。
一种可能的解决方案是在构建jar时通过maven配置文件禁用swagger-ui maven依赖。我想避免这种情况,因为那时我必须有一个用于生产的罐子和一个用于开发的罐子。
我看到了许多建议,但它们似乎是特定于Spring Boot,就像这一个How do you turn off swagger-ui in production
我建议主持一个自己的swagger-ui实例而不是使用thorntail中的那个,因为我认为swagger-ui是一个开发工具,我不会直接在thorntail服务中使用它。
如果swagger-ui作为外部独立服务托管,并且您只需要为所有开发人员安装一个,因为它只是html和javascript,那么您只需要在服务中为提供* / swagger.json的端点关注CORS 。在生产环境中提供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>