我建议托管一个自己的 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>