Spring mvc 使用Spring MVC禁用招摇

Spring mvc 使用Spring MVC禁用招摇,spring-mvc,swagger,Spring Mvc,Swagger,我在SpringMVC中使用Swagger。我希望在特定环境(如生产环境)中有选择地禁用swagger。我该怎么做 如果您使用的是以前的swagger springmvc的1.x版本 当您配置Swigger spring mvc插件时,您可以使用enable方法,您可以根据环境/配置文件等传入布尔值 @Bean 公共炫耀SpringMVCPlugin customImplementation(){ 返回新的SwaggerSpringMvcPlugin(this.springSwaggerConf

我在SpringMVC中使用Swagger。我希望在特定环境(如生产环境)中有选择地禁用swagger。我该怎么做

如果您使用的是以前的swagger springmvc的1.x版本 当您配置Swigger spring mvc插件时,您可以使用
enable
方法,您可以根据环境/配置文件等传入布尔值

@Bean
公共炫耀SpringMVCPlugin customImplementation(){
返回新的SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apinfo(apinfo())

.enable(environmentSpeficicBooleanFlag)//Dilip的答案是您所要求的(我还没有测试过)。但我还有一个可能会引起兴趣的场景要处理:在公共测试框上,我希望文档能够启用,但不公开

我已经将以下内容添加到我的WebMVCConfigureAdapter中,它添加了基本身份验证

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new SwaggerInterceptor())
            .addPathPatterns("/api-docs");
}

private class SwaggerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (!authHeaderValid(request.getHeader("Authorization"))) {
            response.addHeader("Access-Control-Allow-Origin", "null");
            response.addHeader("WWW-Authenticate", "Basic realm=\"\"");
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            response.getWriter().println("HTTP Status " + HttpServletResponse.SC_UNAUTHORIZED);

            return false;
        }

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }

    private boolean authHeaderValid(String authorization) {
        if (authorization != null && authorization.startsWith("Basic ")) {
            final String[] values = new String(Base64.getDecoder().decode(authorization.substring("Basic ".length()))).split(":");

            return values[0].equals("username") && values[1].equals("password");
        }

        return false;
    }
}
你这样试试

@Configuration
@EnableSwagger
// Loads the spring beans required by the framework
public class MySwaggerConfig
{

    private SpringSwaggerConfig springSwaggerConfig;

    /**
     * Required to autowire SpringSwaggerConfig
     */
    @Autowired
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig)
    {
        this.springSwaggerConfig = springSwaggerConfig;
    }

    /**
     * Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc
     * framework - allowing for multiple swagger groups i.e. same code base
     * multiple swagger resource listings.
     */
    @Bean
    public SwaggerSpringMvcPlugin customImplementation()
    {
        return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(apiInfo()).includePatterns(
                ".*?");
    }

    private ApiInfo apiInfo()
    {
        ApiInfo apiInfo = new ApiInfo(
                "xx", 
                "xxxx",
                "My Apps API terms of service", 
                "xxx",
                null,
                null);
        return apiInfo;
    }
}
pom是大摇大摆的springmvc,veriosn是0.9.5


请求后启动服务器

几乎没有什么。我对Swagger完全不熟悉。我想看看在SwaggerConfig中设置JacksonScalSupport.SetRegisterScalModule(false)是否有效。感谢您的响应。我通过使用特定于环境的标志进行了解决。只有当该标志为真时,我才调用Initialize()方法。不幸的是,这不适用于Spring 1.4.1和Swagger 2.6.1,错误发生在调用配置方法之前。
@Profile
似乎不适用于
@Bean
方法。根据“任何
@组件
@配置
都可以用
@配置文件
标记。”。。。"/swagger-ui.html仍然可用,但没有任何方法。有没有办法禁止URL?这是如何回答OP的问题的?这个答案中没有任何内容涉及如何根据应用程序是否在dev vs prod中运行来启用/禁用swagger?这可以通过使用Spring Security来实现,而不是编写自己的aut电子化方法?