关闭Swagger有两种方式

本文介绍了在Spring Boot中关闭Swagger的两种方法:一种是通过@Profile注解限制访问环境,另一种是使用@ConditionalOnProperty注解依赖配置。作者倾向于使用@Profile,因为它可以直接根据环境来控制Swagger的启用,简化配置维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关闭Swagger有两种方式

方式一:

在Swagger2Config上使用@Profile注解标识,@Profile({“dev”,“test”})表示在dev和test环境才能访问swagger-ui.html,prod环境下访问不了。

方式二:

在Swagger2Config上使用@ConditionalOnProperty注解,

@ConditionalOnProperty(name = “swagger.enable”, havingValue = “true”)

表示配置文件中如果swagger.enable =true表示开启。所以只需要在开发环境的配置文件配置为true,生产环境配置为false即可。

本人比较喜欢第一种方式,因为第二种方式还要在每个环境文件中去配置,并维护;Swagger一般用于开发和测试环境,所以直接限制Swagger启用的环境为dev和test即可,这样也不需要再维护配置文件了。

原文链接:https://blog.csdn.net/wangxy_job/article/details/106669805

### 如何在 Swagger 2.2.0 中禁用或关闭 Swagger UI 功能 为了实现禁用或关闭 Swagger UI 的功能,在 Spring Boot 配置中可以通过多种方式来控制其行为。以下是几种常见的方法: #### 方法一:通过条件判断动态加载 `Docket` Bean 如果希望仅在特定环境下启用 Swagger(例如开发环境),可以在创建 `Docket` Bean 时加入条件判断逻辑。 ```java @Configuration public class SwaggerConfig { @Value("${spring.profiles.active}") private String activeProfile; @Bean public Docket api() { if ("prod".equals(activeProfile)) { // 如果当前激活的是生产环境,则不初始化 Docket Bean return null; } return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) .build(); } } ``` 上述代码会根据应用的活动 profile 来决定是否注册 `Docket` Bean[^1]。当运行于生产环境中时,Swagger 将不会被初始化。 --- #### 方法二:移除接口文档路径的安全权限开放设置 如果已经启用了安全框架(如 Spring Security),则可以通过调整安全配置文件中的规则,阻止对外暴露 `/swagger-ui.html` 或其他相关路径。 ```java @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(requests -> requests .requestMatchers("/swagger-ui/**", "/v3/api-docs/**").denyAll() // 明确拒绝访问这些路径 .anyRequest().permitAll()) .csrf(AbstractHttpConfigurer::disable); return http.build(); } } ``` 此配置将明确禁止任何用户访问与 Swagger 相关的 URL 路径[^2]。即使 Swagger 已经启动,外部也无法访问它的界面或者 API 文档资源。 --- #### 方法三:完全删除 Swagger 相关依赖项 对于不需要长期保留 Swagger 功能的情况,可以直接从项目的构建工具配置文件(Maven 的 `pom.xml` 或 Gradle 的 `build.gradle` 文件)里彻底移除所有关于 Swagger 的依赖声明。 以 Maven 为例: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> <!-- 版本号可能不同 --> </dependency> ``` 将其注释掉或删去即可停止引入 Swagger 组件及其关联库[^3]。 --- #### 方法四:自定义过滤器拦截请求 另一种更灵活的方式是编写一个简单的 Servlet 过滤器用于屏蔽对指定 URI 的访问尝试。 ```java @Component public class SwaggerDisableFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; if ("/swagger-ui/index.html".equalsIgnoreCase(httpRequest.getRequestURI())) { httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); return; } chain.doFilter(request, response); } } ``` 该过滤器会在接收到针对某个具体页面(这里是假设为默认入口 `/swagger-ui/index.html`)的 HTTP 请求时立即返回状态码 403 Forbidden 并中断后续处理流程[^1]。 --- ### 总结 以上介绍了四种不同的策略用来解决如何在 Swagger 2.2.0 下禁用或隐藏其前端展示部分的问题。可以根据实际需求选择最合适的方案实施操作。 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值