jakarta-ee - 如何在生产中禁用 swagger-ui(Thorntail)?
问题描述
我有一个使用 Wildfly Swarm(现为 Thorntail)构建的应用程序,并且我已将 Swagger 与我的 REST API 集成以获取文档,并使用它来测试 Swagger-UI。
我想知道在生产环境中部署应用程序时是否可以禁用 Swagger-UI 部分。我试图查看 swagger 文档以查看是否有任何属性,但找不到任何属性。Thorntail 文档也是如此。
一种可能的解决方案是在我构建 jar 时通过 maven 配置文件禁用 swagger-ui maven 依赖项。我想避免这种情况,因为那样我就必须有一个用于生产的罐子和一个用于开发的罐子。
我看到了很多建议,但它们似乎是针对 Spring Boot 的,比如这个你如何在生产中关闭 swagger-ui
解决方案
我建议托管一个自己的 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>
推荐阅读
- vue.js - [Vue warn]: Error in render: "TypeError: Cannot read property 'shipperid' of undefined"
- java - 与 hibernate 4 和 5 兼容的事务关闭语法
- python - 可以在主窗口中打开 jpeg 文件,但不能在第二个窗口中打开它
- docker - 如何在内部网络中在 docker 中运行 fluentd
- node.js - 如何构建 Express 以始终发送 Angular 同时保护 API 路由?
- eiffel - Eiffel:一种在另一个函数上调用前导重新定义特征的方法
- amazon-web-services - 使用 aws 角色执行无服务器部署
- node.js - 我如何使用 router.get 中的请求来放置 socket.username = req.user.username 女巫是来自登录用户的用户?
- javascript - How to add a phrase when other column is populated?
- powershell - ScriptBlock 应该只在 powershell 脚本中指定错误