如何在生产环境禁用Swagger
2017-10-19 08:59
357 查看
SpringMVC集成springfox-swagger2和springfox-swagger-ui很简单,只需要两步:
(1)pom中添加依赖
转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/78280051
但是,如何在生产环境禁用这些api文档呢?试了很多种方式,最终找到一个简单实用的办法:
应该还有更好的办法!
参考:http://blog.csdn.net/w4hechuan2009/article/details/68892718
swagger必须要跟springmvc在同一个context才行,springmvc只是spring的一个子context。如果swagger让spring的context加载,那么swagger的那些url用springmvc的拦截器是拦截不到的!
所以,两种解决办法:
如果是使用注解的方式:
(1)spring-mvc的配置:
(2)spring的配置:
(3)Swagger的配置:
当然更推荐的办法是使用xml配置的方式,因为这样可以不用引入swagger的依赖包:
(1)spring-mvc的配置:
spring-mvc-swagger.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<description>SpringMVC Swagger Configuration</description>
<!-- swagger配置,生产环境置空 -->
<bean class="com.inspur.eyun.yunbx.swagger.SwaggerConfig" />
</beans>
注意:我们这里把swagger单独放到一个配置文件中,如果是线上环境,则文件内容为空,如果是线下测试环境,则配置上Swagger。
(2)spring的配置:
(3)Swagger的配置:
注意:这里我们去掉了@Configuration,同时,修改我们的pom,配置多profile打包:
pom.xml:
通过不同的profile给swagger的依赖设置不同的scope!
注意:springfox-swagger.version=2.7.0有bug,可以使用低版本2.6.1。太他妈的坑!
完美!
(1)pom中添加依赖
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${springfox-swagger.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${springfox-swagger.version}</version> </dependency>(2)添加Swagger的配置类:
@Configuration @EnableSwagger2 @EnableWebMvc @ComponentScan("com.XXX.controller") public class SwaggerConfig{ }然后就可以通过http://localhost/swagger-ui.html看到项目中所有的接口信息了,通过http://localhost/v2/api-docs就能看到json数据。
转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/78280051
但是,如何在生产环境禁用这些api文档呢?试了很多种方式,最终找到一个简单实用的办法:
@Configuration @EnableSwagger2 @EnableWebMvc @ComponentScan("com.XXX.controller") public class SwaggerConfig{ @Autowired ConfigService configService; @Bean public Docket customDocket() { if(configService.getServerEnv() == ServerEnvEnum.ONLINE) { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfoOnline()) .select() .paths(PathSelectors.none())//如果是线上环境,添加路径过滤,设置为全部都不符合 .build(); }else { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()); } } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("XXX系统") .description("XXX系统接口") .license("") .licenseUrl("") .termsOfServiceUrl("") .version("1.0.0") .contact(new Contact("","", "")) .build(); } private ApiInfo apiInfoOnline() { return new ApiInfoBuilder() .title("") .description("") .license("") .licenseUrl("") .termsOfServiceUrl("") .version("") .contact(new Contact("","", "")) .build(); } }现在http://localhost/swagger-ui.html这个页面虽然还能访问,那是却看不到任何内容了,包括http://localhost/v2/api-docs也是一样。
应该还有更好的办法!
参考:http://blog.csdn.net/w4hechuan2009/article/details/68892718
swagger必须要跟springmvc在同一个context才行,springmvc只是spring的一个子context。如果swagger让spring的context加载,那么swagger的那些url用springmvc的拦截器是拦截不到的!
所以,两种解决办法:
如果是使用注解的方式:
(1)spring-mvc的配置:
<!-- 使用Annotation自动注册Bean,只扫描@Controller --> <context:component-scan base-package="com.inspur.eyun.yunbx" use-default-filters="false"><!-- base-package 如果多个,用“,”分隔 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="assignable" expression="com.inspur.eyun.yunbx.swagger.SwaggerConfig"/> </context:component-scan>注意要把swagger的配置加进来,同时:
(2)spring的配置:
<!-- 包扫描、注解相关 --> <context:component-scan base-package="com.inspur.eyun.yunbx"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:exclude-filter type="assignable" expression="com.inspur.eyun.yunbx.swagger.SwaggerConfig"/> </context:component-scan>注意把swagger排除掉
(3)Swagger的配置:
@Configuration @EnableSwagger2 @EnableWebMvc @ComponentScan("com.inspur.eyun.yunbx.controller") public class SwaggerConfig{ }注意@Configuration注解。
当然更推荐的办法是使用xml配置的方式,因为这样可以不用引入swagger的依赖包:
(1)spring-mvc的配置:
<!-- 使用Annotation自动注册Bean,只扫描@Controller --> <context:component-scan base-package="com.inspur.eyun.yunbx" use-default-filters="false"><!-- base-package 如果多个,用“,”分隔 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <import resource="classpath:spring-mvc-swagger.xml" />
spring-mvc-swagger.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<description>SpringMVC Swagger Configuration</description>
<!-- swagger配置,生产环境置空 -->
<bean class="com.inspur.eyun.yunbx.swagger.SwaggerConfig" />
</beans>
注意:我们这里把swagger单独放到一个配置文件中,如果是线上环境,则文件内容为空,如果是线下测试环境,则配置上Swagger。
(2)spring的配置:
<!-- 包扫描、注解相关 --> <context:component-scan base-package="com.inspur.eyun.yunbx"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
(3)Swagger的配置:
@EnableSwagger2 @EnableWebMvc public class SwaggerConfig{ @Bean public Docket customDocket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.inspur.eyun.yunbx.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("XXX平台") .description("XXX平台接口") .license("") .licenseUrl("") .termsOfServiceUrl("") .version("1.0.0") .contact(new Contact("","", "")) .build(); } }
注意:这里我们去掉了@Configuration,同时,修改我们的pom,配置多profile打包:
pom.xml:
<!-- Swagger --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${springfox-swagger.version}</version> <scope>${swagger.scope}</scope> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <scope>${swagger.scope}</scope> <version>${springfox-swagger-ui.version}</version> </dependency>注意:这里的依赖的scope是动态设置的,如果是线上环境,我们把scope设置成provided就可以。
<profiles> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> <swagger.scope>compile</swagger.scope> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profiles.active>test</profiles.active> <swagger.scope>compile</swagger.scope> </properties> </profile> <profile> <id>online</id> <properties> <profiles.active>online</profiles.active> <swagger.scope>provided</swagger.scope> </properties> </profile> </profiles>
通过不同的profile给swagger的依赖设置不同的scope!
注意:springfox-swagger.version=2.7.0有bug,可以使用低版本2.6.1。太他妈的坑!
完美!
相关文章推荐
- 如何在生产环境禁用Swagger
- SpringMVC如何在生产环境禁用Swagger的方法
- Spark视频王家林第119课: Spark Streaming性能优化:如何在生产环境下应对流数据峰值巨变?
- 生产环境该如何选择lvs的工作模式,和哪一种算法
- centos生产环境禁用root用户ssh登录
- 禁用了PowerShell又如何?看我如何用PowerShell绕过应用白名单、环境限制、以及杀毒软件
- 如何把Baan生产环境复制到测试环境!
- 大数据IMF传奇行动绝密课程第119课:Spark Streaming性能优化:如何在生产环境下应对流数据峰值巨变
- maven如何为不同的环境打包-开发、测试、生产环境
- 生产环境该如何选择lvs的工作模式,和哪一种算法
- 如何在生产环境部署K2的流程
- 在windows server 2008域环境中如何禁用密码复杂性要求?
- 生产环境下应该如何搭配hadoop生态系统个组件版本
- 如何在生产环境下实现每天自动备份mysql数据库
- 如何在生产环境中运行Docker容器
- 如何对生产环境的JAVA应用进行远程调试
- SCOM 如何监控生产环境中的Linux&Unix机器 推荐
- 如何安全地配置一个生产环境的MongoDB服务器?
- 生产环境下如何优雅地重启 Tornado
- ios7环境下如何禁用UINavigationController中的轻扫回退的手势