Spring Boot 3 + Spring Security + Knife4j 无法访问 Swagger 文档的问题及解决方案
背景介绍
在使用Spring Boot 3框架结合Spring Security进行项目开发时,我们可能会遇到集成Knife4j后Swagger文档无法正常访问的情况。本文将探讨可能的原因以及相应的解决办法。
常见问题
问题描述
当配置好Spring Security后尝试通过Knife4j访问API文档页面时,可能会出现如下情况:
- 访问Swagger UI页面时返回403 Forbidden错误。
- Swagger UI页面加载不完全或者完全不显示。
解决方案
步骤一:检查安全配置
确保你的Spring Security配置允许对Swagger资源的访问。可以通过添加特定的规则来排除Swagger相关的路径,例如:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 不需要校验的接口
.requestMatchers("/api/auth/**").permitAll()
.requestMatchers("/doc.html","/webjars/**", "/swagger-resources/**", "/v3/**").permitAll()
.anyRequest().authenticated(); // 其他所有请求需要认证
// ...其他配置...
}
}
步骤二:要在 yml 文件中放行
spring:
security:
web:
include-filter-by-default: false # 默认情况下不包含任何过滤器
exclude-filter:
- /doc.html # 这些是 swagger 文档需要放行的路径
- /webjars/**
- /v3/**
- /swagger-resources/**
# 如果使用的是Spring Security的自定义配置类,可以在下面添加bean定义
# 或者直接在Java配置类中配置