pringMVC集成springfox-swagger2和springfox-swagger-ui很简单,只需要两步:

(1)pom中添加依赖

  1. <dependency>
  2. <groupId>io.springfox</groupId>
  3. <artifactId>springfox-swagger-ui</artifactId>
  4. <version>${springfox-swagger.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.springfox</groupId>
  8. <artifactId>springfox-swagger2</artifactId>
  9. <version>${springfox-swagger.version}</version>
  10. </dependency>

(2)添加Swagger的配置类:

  1. @Configuration
  2. @EnableSwagger2
  3. @EnableWebMvc
  4. @ComponentScan("com.XXX.controller")
  5. public class SwaggerConfig{
  6. }

然后就可以通过http://localhost/swagger-ui.html看到项目中所有的接口信息了,通过http://localhost/v2/api-docs就能看到json数据。

转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/78280051

但是,如何在生产环境禁用这些api文档呢?试了很多种方式,最终找到一个简单实用的办法:

  1. @Configuration
  2. @EnableSwagger2
  3. @EnableWebMvc
  4. @ComponentScan("com.XXX.controller")
  5. public class SwaggerConfig{
  6. @Autowired
  7. ConfigService configService;
  8. @Bean
  9. public Docket customDocket() {
  10. if(configService.getServerEnv() == ServerEnvEnum.ONLINE) {
  11. return new Docket(DocumentationType.SWAGGER_2)
  12. .apiInfo(apiInfoOnline())
  13. .select()
  14. .paths(PathSelectors.none())//如果是线上环境,添加路径过滤,设置为全部都不符合
  15. .build();
  16. }else {
  17. return new Docket(DocumentationType.SWAGGER_2)
  18. .apiInfo(apiInfo());
  19. }
  20. }
  21. private ApiInfo apiInfo() {
  22. return new ApiInfoBuilder()
  23. .title("XXX系统")
  24. .description("XXX系统接口")
  25. .license("")
  26. .licenseUrl("")
  27. .termsOfServiceUrl("")
  28. .version("1.0.0")
  29. .contact(new Contact("","", ""))
  30. .build();
  31. }
  32. private ApiInfo apiInfoOnline() {
  33. return new ApiInfoBuilder()
  34. .title("")
  35. .description("")
  36. .license("")
  37. .licenseUrl("")
  38. .termsOfServiceUrl("")
  39. .version("")
  40. .contact(new Contact("","", ""))
  41. .build();
  42. }
  43. }
  44. 参考:http://blog.csdn.net/w4hechuan2009/article/details/68892718

    swagger必须要跟springmvc在同一个context才行,springmvc只是spring的一个子context。如果swagger让spring的context加载,那么swagger的那些url用springmvc的拦截器是拦截不到的!

    所以,两种解决办法:

    如果是使用注解的方式:

    (1)spring-mvc的配置:

    1. <!-- 使用Annotation自动注册Bean,只扫描@Controller -->
    2. <context:component-scan base-package="com.inspur.eyun.yunbx" use-default-filters="false"><!-- base-package 如果多个,用“,”分隔 -->
    3. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    4. <context:include-filter type="assignable" expression="com.inspur.eyun.yunbx.swagger.SwaggerConfig"/>
    5. </context:component-scan>

    注意要把swagger的配置加进来,同时:

    (2)spring的配置:

    1. <!-- 包扫描、注解相关 -->
    2. <context:component-scan base-package="com.inspur.eyun.yunbx">
    3. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    4. <context:exclude-filter type="assignable" expression="com.inspur.eyun.yunbx.swagger.SwaggerConfig"/>
    5. </context:component-scan>

    注意把swagger排除掉

    (3)Swagger的配置:

    1. @Configuration
    2. @EnableSwagger2
    3. @EnableWebMvc
    4. @ComponentScan("com.inspur.eyun.yunbx.controller")
    5. public class SwaggerConfig{
    6. }

    注意@Configuration注解。

    当然更推荐的办法是使用xml配置的方式,因为这样可以不用引入swagger的依赖包:

    (1)spring-mvc的配置:

    1. <!-- 使用Annotation自动注册Bean,只扫描@Controller -->
    2. <context:component-scan base-package="com.inspur.eyun.yunbx" use-default-filters="false"><!-- base-package 如果多个,用“,”分隔 -->
    3. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    4. </context:component-scan>
    5. <import resource="classpath:spring-mvc-swagger.xml" />

    spring-mvc-swagger.xml:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="
    5. http://www.springframework.org/schema/beans
    6. http://www.springframework.org/schema/beans/spring-beans.xsd">
    7. <description>SpringMVC Swagger Configuration</description>
    8. <!-- swagger配置,生产环境置空 -->
    9. <bean class="com.inspur.eyun.yunbx.swagger.SwaggerConfig" />
    10. </beans>

    注意:我们这里把swagger单独放到一个配置文件中,如果是线上环境,则文件内容为空,如果是线下测试环境,则配置上Swagger。

    (2)spring的配置:

    1. <!-- 包扫描、注解相关 -->
    2. <context:component-scan base-package="com.inspur.eyun.yunbx">
    3. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    4. </context:component-scan>

    (3)Swagger的配置:

    1. @EnableSwagger2
    2. @EnableWebMvc
    3. public class SwaggerConfig{
    4. @Bean
    5. public Docket customDocket() {
    6. return new Docket(DocumentationType.SWAGGER_2)
    7. .apiInfo(apiInfo())
    8. .select()
    9. .apis(RequestHandlerSelectors.basePackage("com.inspur.eyun.yunbx.controller"))
    10. .paths(PathSelectors.any())
    11. .build();
    12. }
    13. private ApiInfo apiInfo() {
    14. return new ApiInfoBuilder()
    15. .title("XXX平台")
    16. .description("XXX平台接口")
    17. .license("")
    18. .licenseUrl("")
    19. .termsOfServiceUrl("")
    20. .version("1.0.0")
    21. .contact(new Contact("","", ""))
    22. .build();
    23. }
    24. }

    注意:这里我们去掉了@Configuration,同时,修改我们的pom,配置多profile打包:

    pom.xml:

    1. <!-- Swagger -->
    2. <dependency>
    3. <groupId>io.springfox</groupId>
    4. <artifactId>springfox-swagger2</artifactId>
    5. <version>${springfox-swagger.version}</version>
    6. <scope>${swagger.scope}</scope>
    7. </dependency>
    8. <dependency>
    9. <groupId>io.springfox</groupId>
    10. <artifactId>springfox-swagger-ui</artifactId>
    11. <scope>${swagger.scope}</scope>
    12. <version>${springfox-swagger-ui.version}</version>
    13. </dependency>

    注意:这里的依赖的scope是动态设置的,如果是线上环境,我们把scope设置成provided就可以。

    1. <profiles>
    2. <profile>
    3. <id>dev</id>
    4. <properties>
    5. <profiles.active>dev</profiles.active>
    6. <swagger.scope>compile</swagger.scope>
    7. </properties>
    8. <activation>
    9. <activeByDefault>true</activeByDefault>
    10. </activation>
    11. </profile>
    12. <profile>
    13. <id>test</id>
    14. <properties>
    15. <profiles.active>test</profiles.active>
    16. <swagger.scope>compile</swagger.scope>
    17. </properties>
    18. </profile>
    19. <profile>
    20. <id>online</id>
    21. <properties>
    22. <profiles.active>online</profiles.active>
    23. <swagger.scope>provided</swagger.scope>
    24. </properties>
    25. </profile>
    26. </profiles>

    通过不同的profile给swagger的依赖设置不同的scope!

    注意:springfox-swagger.version=2.7.0有bug,可以使用低版本2.6.1。太他妈的坑!

如何在生产环境禁用swagger的更多相关文章

  1. 配置不同环境下启用swagger,在生产环境关闭swagger

    前言 Swagger使用起来简单方便,几乎所有的API接口文档都采用swagger了.使用示例:http://www.cnblogs.com/woshimrf/p/swagger.html, 现在开发 ...

  2. 生产环境屏蔽swagger(动态组装bean)

    spring动态组装bean 背景介绍: 整合swagger时需要在生产环境中屏蔽掉swagger的地址,不能在生产环境使用 解决方案 使用动态profile在生产环境中不注入swagger的bean ...

  3. 在生产环境下禁用swagger

    学习目标 快速学会使用注解关闭Swagger2,避免接口重复暴露. 使用教程 禁用方法1:使用注解@Profile({"dev","test"}) 表示在开发或 ...

  4. SpringBoot 通过配置禁用swagger

    转自:https://blog.csdn.net/weixin_37264997/article/details/82762050 一.序言 在生产环境下,我们需要关闭swagger配置,避免暴露接口 ...

  5. 【简记】SpringBoot禁用Swagger

    楔子 Swagger 是 Java Web 开发中常用的接口文档生成类库,在开发和前后端联调时使用它来模拟接口调用能提高开发效率.但是,在生产环境可能并不需要它,一个原因是启用它会延长程序启动时间(动 ...

  6. Greenplum 数据库安装部署(生产环境)

    Greenplum 数据库安装部署(生产环境) 硬件配置: 16 台 IBM X3650, 节点配置:CPU 2 * 8core,内存 128GB,硬盘 16 * 900GB,万兆网卡. 万兆交换机. ...

  7. [译]MongoDb生产环境注意事项

    译注: 本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容.这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者 ...

  8. 【转】生产环境MySQL Server核心参数的配置

         ⑴ lower_case_table_names              ● 推荐理由                    GNU/Linux 平台,对数据库.表.存储过程等对象名称大小 ...

  9. MongoDB 生产环境笔记

    目录 MongoDB 生产环境笔记 一.vm.zone_reclaim_mode 参数 二.添加 swap 分区 三.设置 swappiness 参数 四.内核和文件系统版本 五.禁用 Transpa ...

随机推荐

  1. linux系统编程之错误处理:perror,strerror和errno

    1,在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述. errno这个全局变量在<errno.h>头文件中声明如下:extern int errno; errno是 ...

  2. 微信小程序支付前端源码

    //index.js Page({ data: { }, //点击支付按钮进行支付 payclick: function () { var t = this; wx.login({ //获取code换 ...

  3. ABP框架入门踩坑-使用MySQL

    使用MySQL ABP踩坑记录-目录 起因 因为我自用的服务器只是腾讯云1核1G的学生机,不方便装SQL Server,所以转而MySQL. 这里使用的MySQL版本号为 8.0. 解决方案 删除Qi ...

  4. 第五章 JVM垃圾收集器(1)

    说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见<第四章 JVM垃圾回收算法> 1.七种垃圾收集器 Serial(串行GC)-- 复制 ParNew(并行GC)-- ...

  5. Python廖雪峰学习笔记——操作文件和目录

    查看当前目录的绝对路径: >>>os.path.abspath('.') # 在某个目录下创建一个新目录, # 首先把新目录的完整路径表示出来: >>> os.pa ...

  6. Java基础学习篇---------多态

    一.多态性的理解 1.向上转型:子类为父类对象实例化,调用的一定是子类覆写的方法,他们之间找的是共性 2.向下转型:子类扩充了父类的某些功能,而父类中没有该功能,他们之间找的是特性 案例: Numbe ...

  7. FFMPEG的函数翻译文档

    https://blog.csdn.net/explorer_day/article/category/6289310/2 https://www.cnblogs.com/tocy/p/ffmpeg- ...

  8. 【bug记录】jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session

    前言 最近开发项目比较忙,Spring Cloud的笔记得稍稍放放了,下午出来个bug,恶心的不行,功能很简单,也没有什么级联或复杂的映射关系,就是一直在报三个异常 Caused by: com.fa ...

  9. 从getwebshell到绕过安全狗云锁提权再到利用matasploit进服务器

    本文作者:i春秋签约作家——酷帥王子 一. 利用getwebshell篇 首先对目标站进行扫描,发现是asp的,直接扫出网站后台和默认数据库,下载解密登陆如图: 下面进后台发现有fckeditor,而 ...

  10. [JavaScript] iframe加载完成事件

    //iframe加载完成后,对其子元素进行操作 var iframe = document.getElementById("re-img"); if (iframe.attachE ...