1. 为什么Swagger需要鉴权保护?
想象一下你刚开发完一套电商API,所有商品价格、用户订单、支付接口的细节都通过Swagger UI暴露在公网上。第二天可能就会有人用脚本批量抓取你的商品数据,甚至尝试调用支付接口——这就是不加保护的API文档带来的真实风险。
Swagger UI本质上是一个网页应用,它会自动扫描你项目中的接口定义并生成可视化文档。默认情况下,所有访问者都能:
- 查看所有API的URL、参数格式、返回值结构
- 直接在页面上发起测试请求
- 下载完整的API规范文件
我在金融项目里就遇到过这样的案例:测试环境的Swagger被爬虫扫描,导致接口参数规则泄露,攻击者利用这个漏洞伪造了支付回调。从那之后,我给所有项目的Swagger都加上了三道安全防线:
- 基础认证:必须输入账号密码
- IP白名单:仅限内网访问
- 权限分级:不同角色看到不同API文档
2. Spring Security保护Swagger的四种方案
2.1 基础HTTP认证(最快实现)
这是最简单的保护方式,适合中小型项目快速上线。我们只需要在application.yml中添加:
spring:
security:
user:
name: admin
password: $2a$10$N9qo8uLOickgx2ZMRZoMy.Mrq5QY1dVPLjS5V4WWRJQjOjF2JX1Gq # bcrypt加密后的密码
然后在配置类中放行静态资源:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/swagger-ui/**", "/v3/api-docs/**").authenticated()
.and()
.httpBasic();
}
}
实测发现一个坑:Spring Boot 2.7+版本需要额外处理静态资源路径:
908



被折叠的 条评论
为什么被折叠?



