使用Swagger接口:http://localhost:9090/swagger-ui.html,被后端拦截了
时间: 2025-07-26 22:34:36 浏览: 20
<think>我们正在讨论Swagger接口被后端拦截的问题。根据引用内容,Swagger是一个用于生成API文档和测试接口的工具,但在某些情况下,由于安全框架(如Shiro或SpringSecurity)的配置,访问Swagger的请求可能会被拦截,导致无法直接访问。引用[1]提到,在Shiro中会拦截所有请求,因此需要添加默认访问路径(如`ip:port/context/swagger-ui.html#/`)并登录后才能访问。引用[3]则提供了一个具体的例子,在RuoYi-Vue框架中,通过SecurityConfig配置来允许匿名访问某些URL,其中就包括Swagger相关的路径。因此,Swagger接口被拦截的原因主要是安全框架的配置没有将Swagger的相关路径排除在认证之外。解决方案就是修改安全配置,将Swagger的访问路径加入到允许匿名访问的列表中。具体步骤可能包括:
1.找到安全配置文件(如SecurityConfig.java)。2.在配置中,添加Swagger相关的路径到permitAll()的列表中。根据引用[3]的示例,需要允许的路径包括:-`/swagger-ui.html`- `/swagger-resources/**`- `/webjars/**`
-`/*/api-docs`
-`/druid/**`(如果使用了Druid监控,也需要放行)另外,引用[1]还提到,如果项目有上下文路径(contextpath),则需要在访问路径中加上该上下文路径。
所以,总结解决方案:-修改安全配置,放行Swagger相关的URL。
-访问时使用完整的路径(包括上下文路径)。
下面我将用中文给出一个结构清晰的回答,并生成相关问题。</think>### Swagger接口被后端拦截的原因及解决方案
#### 原因分析
1. **安全框架拦截机制**
主流安全框架(如Shiro、Spring Security)默认拦截所有请求,包括Swagger的API文档路径。例如:
- Shiro会拦截`/swagger-ui.html`等路径[^1]
- Spring Security需显式配置白名单[^3]
2. **上下文路径缺失**
项目部署时若添加了上下文路径(如`/api`),但访问Swagger时未包含该路径,会导致404或被拦截[^1]。
3. **认证要求未豁免**
Swagger相关URL未被添加到安全配置的`permitAll()`列表中,需登录才能访问[^3]。
#### 解决方案
**1. 修改安全配置(以Spring Security为例)**
在安全配置类中添加Swagger路径白名单:
```java
@Configuration
public class SecurityConfig {
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// 放行Swagger相关路径
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/v2/api-docs").permitAll()
// 放行静态资源
.antMatchers(HttpMethod.GET, "/**/*.css", "/**/*.js").permitAll()
.anyRequest().authenticated();
}
}
```
> 关键配置项[^3]:
> - `/swagger-ui.html`:主页面
> - `/swagger-resources/**`:资源文件
> - `/webjars/**`:前端依赖库
> - `/v2/api-docs`:API元数据
**2. 添加上下文路径**
访问时需包含项目上下文路径:
`http://ip:port/项目上下文/swagger-ui.html`
> 例如部署路径为`/api`时,完整URL应为:
> `http://localhost:8080/api/swagger-ui.html`[^1]
**3. 关闭生产环境Swagger(可选)**
通过Profile控制仅在开发环境启用:
```yaml
# application.yml
spring:
profiles:
active: dev # 生产环境改为prod
swagger:
enable: ${spring.profiles.active} != 'prod'
```
#### 验证步骤
1. 直接访问`{完整URL}/swagger-ui.html`应无需登录
2. 检查浏览器控制台无403/401错误
3. 确认`/v2/api-docs`接口返回JSON数据
> **技术原理**:Swagger本质是静态资源+API端点,需同时放行HTML页面和后台数据接口[^2]。
阅读全文
相关推荐




















