我正在使用Swagger和Jersey 2以及spring bootstrap。目前我正在寻找一种解决方案来禁用生产上的招摇,因为在任何用户的情况下它都会受到关注 将API与swagger UI一起使用。
我在web.xml中注册了io.swagger.jersey.config.JerseyJaxrsConfig servlet,并将init参数传递给它,如api.version和swagger.api.basepath。随着这个我注册的包扫描为io.swagger.jaxrs.listing,以便org.glassfish.jersey.server.ResourceConfig将注意准备swagger UI。
我从互联网上了解到,我们可以使用@profile注释来实现这个byb。但我经历过如果我们在Web.xml中注册任何类,即使您在该类级别使用@Profile,它也不会在上下文加载时加载该类。
我的项目中有静态内容,如swagger-ui-min.js,swagger-ui.js,index.html等,以加载招摇。
通过此设置,如何在生产中禁用swagger UI?如果有人有经验,是否可以在生产中禁用招摇?
答案 0 :(得分:0)
你可以有一个标志,只有当你不在生产时才允许加载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;
}
}
答案 1 :(得分:0)
下面的代码对我有用。
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。