Spring mvc 使用Spring MVC禁用招摇
我在SpringMVC中使用Swagger。我希望在特定环境(如生产环境)中有选择地禁用swagger。我该怎么做 如果您使用的是以前的swagger springmvc的1.x版本 当您配置Swigger 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
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电子化方法?