1 引言

在微服务架构中,Swagger作为API文档工具,为开发者提供了极大的便利。然而,在生产环境中,出于安全和性能的考虑,我们通常希望禁用Swagger。本文将介绍如何通过Nacos配置中心,在生产环境中动态禁用Swagger,实现配置的集中管理和动态更新。

2 项目依赖引入

首先,确保你的Spring MVC项目中已经引入了Nacos和Swagger 2的依赖。在你的pom.xml文件中添加以下依赖:

<dependencies>  
    <!-- Nacos Config -->  
    <dependency>  
        <groupId>com.alibaba.cloud</groupId>  
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>  
    </dependency>  
  
    <!-- Swagger 2 -->  
    <dependency>  
        <groupId>io.springfox</groupId>  
        <artifactId>springfox-swagger2</artifactId>  
        <version>2.9.2</version>  
    </dependency>  
    <dependency>  
        <groupId>io.springfox</groupId>  
        <artifactId>springfox-swagger-ui</artifactId>  
        <version>2.9.2</version>  
    </dependency>  
</dependencies>

3 Nacos配置

在application.yml中配置Nacos的连接信息:

spring:  
  cloud:  
    nacos:  
      config:  
        server-addr: 127.0.0.1:8848  
        namespace: your-namespace  
        group: your-group  
        file-extension: yml

4 在Nacos中创建配置文件

在Nacos控制台中创建一个新的配置文件,例如swagger-config.yml,并添加以下内容:

swagger:  
  enabled: true

注意,默认情况下,我们将Swagger设置为启用状态。对于生产环境,我们将在后续步骤中创建特定的配置文件来禁用Swagger。

5 Spring项目读取Nacos配置

在你的Spring项目中,创建一个配置类来读取Nacos中的配置,并根据配置决定是否启用Swagger。

import org.springframework.beans.factory.annotation.Value;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import springfox.documentation.builders.PathSelectors;  
import springfox.documentation.builders.RequestHandlerSelectors;  
import springfox.documentation.spi.DocumentationType;  
import springfox.documentation.spring.web.plugins.Docket;  
import springfox.documentation.swagger2.annotations.EnableSwagger2;  
  
@Configuration  
@EnableSwagger2  
public class SwaggerConfig {  
  
    @Value("${swagger.enabled:true}")  
    private boolean swaggerEnabled;  
  
    @Bean  
    public Docket api() {  
        return new Docket(DocumentationType.SWAGGER_2)  
            .enable(swaggerEnabled)  
            .select()  
            .apis(RequestHandlerSelectors.any())  
            .paths(PathSelectors.any())  
            .build();  
    }  
}

6 动态更新配置

Nacos支持动态更新配置。你可以通过Nacos控制台修改swagger.enabled的值,Spring项目会自动重新加载配置并更新Swagger的状态。

7 生产环境配置

为了确保Swagger在生产环境中被禁用,你可以在Nacos中为生产环境创建一个单独的配置文件,例如swagger-config-prod.yml,并设置swagger.enabled: false。

然后,在生产环境的启动参数中指定使用该配置文件。例如,在生产环境的启动脚本中添加以下参数:

java -jar your-application.jar --spring.cloud.nacos.config.file-extension=yml --spring.cloud.nacos.config.group=prod

这样,在生产环境中,Swagger将被禁用,而无需修改代码或重新打包应用。

8 总结

通过Nacos配置中心,我们可以实现Swagger在生产环境中的动态禁用。这种方法不仅提高了配置的灵活性,还便于集中管理和动态更新。同时,它也避免了在代码中硬编码配置的局限性,使得我们的应用更加健壮和易于维护。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐