在没有web.xml的情况下初始化swagger以在生产中禁用它

时间:2017-08-03 13:01:53

标签: rest jersey-2.0 swagger-ui

我正在使用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?如果有人有经验,是否可以在生产中禁用招摇?

2 个答案:

答案 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。