项目集成swagger2后,发现一个问题,就是项目无论是在测试环境,本地环境,还是生产环境,都能查看到swagger的接口文档,但是接口个不应该这样对外暴露,这样就涉及到了安全问题。
于是我做了对swagger进行安全控制的实现。
1 在配置文件中配置
#swagger配置
swagger.show=true
一般项目有三个配置文件,分别为生产,测试及本地,在本地设置 swagger.show=true 其他为false
2 在代码中进行获取配置文件的值并评断
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Value("${swagger.show}")
private boolean swaggerShow;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.enable(swaggerShow)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.unitrans.agency"))
.paths(PathSelectors.any())
.build();
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Value("${swagger.show}")
private boolean swaggerShow;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (this.swaggerShow) {
registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");
// 解决 SWAGGER 404报错
registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
}
这样swagger的安全问题就解决了。