如何在生产环境禁用swagger
pringMVC集成springfox-swagger2和springfox-swagger-ui很简单,只需要两步:
(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://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的更多相关文章
- 配置不同环境下启用swagger,在生产环境关闭swagger
前言 Swagger使用起来简单方便,几乎所有的API接口文档都采用swagger了.使用示例:http://www.cnblogs.com/woshimrf/p/swagger.html, 现在开发 ...
- 生产环境屏蔽swagger(动态组装bean)
spring动态组装bean 背景介绍: 整合swagger时需要在生产环境中屏蔽掉swagger的地址,不能在生产环境使用 解决方案 使用动态profile在生产环境中不注入swagger的bean ...
- 在生产环境下禁用swagger
学习目标 快速学会使用注解关闭Swagger2,避免接口重复暴露. 使用教程 禁用方法1:使用注解@Profile({"dev","test"}) 表示在开发或 ...
- SpringBoot 通过配置禁用swagger
转自:https://blog.csdn.net/weixin_37264997/article/details/82762050 一.序言 在生产环境下,我们需要关闭swagger配置,避免暴露接口 ...
- 【简记】SpringBoot禁用Swagger
楔子 Swagger 是 Java Web 开发中常用的接口文档生成类库,在开发和前后端联调时使用它来模拟接口调用能提高开发效率.但是,在生产环境可能并不需要它,一个原因是启用它会延长程序启动时间(动 ...
- Greenplum 数据库安装部署(生产环境)
Greenplum 数据库安装部署(生产环境) 硬件配置: 16 台 IBM X3650, 节点配置:CPU 2 * 8core,内存 128GB,硬盘 16 * 900GB,万兆网卡. 万兆交换机. ...
- [译]MongoDb生产环境注意事项
译注: 本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容.这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者 ...
- 【转】生产环境MySQL Server核心参数的配置
⑴ lower_case_table_names ● 推荐理由 GNU/Linux 平台,对数据库.表.存储过程等对象名称大小 ...
- MongoDB 生产环境笔记
目录 MongoDB 生产环境笔记 一.vm.zone_reclaim_mode 参数 二.添加 swap 分区 三.设置 swappiness 参数 四.内核和文件系统版本 五.禁用 Transpa ...
随机推荐
- leetcode 123. 买卖股票的最佳时机 III JAVA
题目: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必须在再次购买前出 ...
- 极大提高Web开发效率的8个工具和建议(含教程)
面对复杂的 Web 应用的开发,良好的流程和工具支持是必不可少的,它们可以让日常的开发工作更加顺畅.更加高效.本文介绍了6个Web开发利器以及相关的教程,帮助你在开发.调试.集成和发布过程极大地提高效 ...
- MySQL数据库命令大全
--数据库操作前的准备-- 创建数据库-- create database python_test_1 charset=utf8; -- 使用数据库-- use python_test_1; -- s ...
- 查询改写(Query Rewrite)方法总结
为何需要Query改写 Query分析是搜索引擎的一个重要模块,对搜索结果的覆盖率和相关性至关重要.搜索引擎的检索过程包含了两个重要的阶段:匹配和排序.匹配也叫召回,表示根据用户的查询条件,尽可能多地 ...
- Process Explore & Windbg
遇到点内存泄漏.句柄泄漏,应该是家常便饭了.这次就是,程序运行内存一点点增加,句柄也是只增不减,个数竟然可以达到几十万,真是瞪大了我的双眼. 借此机会,学习下相关工具~ Process Explore ...
- 通过sessionStorage来根据屏幕宽度变化来加载不同的html页面
因为项目需要,分别写了移动端和PC端的两个html页面,现在需要根据不同的屏幕宽度来加载对应的页面. 先说一下本人的思路-- 刚开始我直接在加载页面的时候判断屏幕宽度,然后加载相应的页面,大家是不是也 ...
- 腾讯云 利用php + apache + mysql 搭建服务器环境
1.一键安装需要的软件源 yum install -y httpd php php-fpm mysql mysql-server php-mysql 1) httpd 即为 apache 2)php ...
- js之作用域
1.什么是作用域 作用域是用于收集存储维护变量,以及当前执行代码声明的变量所拥有的权限, 例如 : function foo(a){ console.log(a); -------- 1 ...
- Kubernetes使用GlusterFS实现数据持久化
k8s中部署有状态应用等需要持久化数据的应用,必不可少得用存储,k8s支持很多中存储方案,我司目前使用的存储有glusterfs(分为容器化和裸机方式).nfs供应用选用,本次就简单实战下gluste ...
- 转 ZFC公理系统
http://blog.sina.com.cn/s/blog_5d045b5c0100spld.html 首先,ZFC集合论中的公理大致分为3组: 1.外延公理. 2.子集公理模式.无序对公理.并集公 ...