在没有 web.xml 的情况下初始化 swagger 以在生产中禁用它
Initialize swagger without web.xml to disable it in production
我正在将 Swagger 与 Jersey 2 和 spring bootstrap 一起使用。目前我正在寻找一种解决方案来禁用 swagger on production,因为如果任何用户都会担心
使用 API 和 swagger UI。
我正在 web.xml 中注册 io.swagger.jersey.config.JerseyJaxrsConfig servlet,并像 api.version 和 swagger.api.basepath 一样将初始化参数传递给它。与此同时,我正在注册包以扫描为 io.swagger.jaxrs.listing 以便 org.glassfish.jersey.server.ResourceConfig 将注意准备 swagger UI.
我从网上了解到我们可以使用@profile 注释来实现这个byb。但是我遇到过,如果我们在 Web.xml 中注册任何 class,即使您在那个 class 级别上使用 @Profile,它也不会像 class 那样工作在上下文加载时加载。
我的项目中有静态内容,如 swagger-ui-min.js、swagger-ui.js、index.html 等来加载 swagger。
使用此设置,如何在生产中禁用 swagger UI?另外,如果有人在 . 方面有经验,是否应该在生产中禁用 swagger?
您可以有一个标志,仅当您不在生产环境时才允许加载 Swagger Servlet(此处用于 Swagger 2):
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;
import io.swagger.jaxrs2.integration.resources.OpenApiResource;
@ApplicationPath("") // no application path after the context root
public class MyApp extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<>();
classes.add(...); // your main service
if (notInProduction) { // a flag telling that you are not in production
classes.add(OpenApiResource.class);
}
return classes;
}
}
下面的代码对我有用。
String enable_swagger_ui = System.getenv("ENABLE_SWAGGER_UI");
if( enable_swagger_ui != null && enable_swagger_ui.equalsIgnoreCase("true"))
packages("io.swagger.jaxrs.listing");
只需要在系统环境变量中添加ENABLE_SWAGGER_UI即可启用swagger。
我正在将 Swagger 与 Jersey 2 和 spring bootstrap 一起使用。目前我正在寻找一种解决方案来禁用 swagger on production,因为如果任何用户都会担心 使用 API 和 swagger UI。
我正在 web.xml 中注册 io.swagger.jersey.config.JerseyJaxrsConfig servlet,并像 api.version 和 swagger.api.basepath 一样将初始化参数传递给它。与此同时,我正在注册包以扫描为 io.swagger.jaxrs.listing 以便 org.glassfish.jersey.server.ResourceConfig 将注意准备 swagger UI.
我从网上了解到我们可以使用@profile 注释来实现这个byb。但是我遇到过,如果我们在 Web.xml 中注册任何 class,即使您在那个 class 级别上使用 @Profile,它也不会像 class 那样工作在上下文加载时加载。
我的项目中有静态内容,如 swagger-ui-min.js、swagger-ui.js、index.html 等来加载 swagger。
使用此设置,如何在生产中禁用 swagger UI?另外,如果有人在 . 方面有经验,是否应该在生产中禁用 swagger?
您可以有一个标志,仅当您不在生产环境时才允许加载 Swagger Servlet(此处用于 Swagger 2):
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;
import io.swagger.jaxrs2.integration.resources.OpenApiResource;
@ApplicationPath("") // no application path after the context root
public class MyApp extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<>();
classes.add(...); // your main service
if (notInProduction) { // a flag telling that you are not in production
classes.add(OpenApiResource.class);
}
return classes;
}
}
下面的代码对我有用。
String enable_swagger_ui = System.getenv("ENABLE_SWAGGER_UI");
if( enable_swagger_ui != null && enable_swagger_ui.equalsIgnoreCase("true"))
packages("io.swagger.jaxrs.listing");
只需要在系统环境变量中添加ENABLE_SWAGGER_UI即可启用swagger。