Spring Boot中Swagger文档免认证访问及YAML文件404问题排查
问题解决方法
核心原因
你在SecurityConfig中添加了@EnableWebMvc注解,这个注解会禁用Spring Boot默认的WebMvc自动配置,其中就包含静态资源的映射规则,导致src/main/resources/static下的Swagger YAML文件无法被正确访问——即使Spring Security已经放开了对应路径的权限。
解决方案
方案1:移除@EnableWebMvc注解(推荐)
直接删除SecurityConfig类上的@EnableWebMvc注解,Spring Boot会自动启用默认的WebMvc配置,静态资源会自动映射到根路径,此时/swagger-apis/api1/swagger.yaml就能正常访问。
修改后的SecurityConfig类头部:
@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfig { // 其余代码保持不变 }
方案2:手动配置静态资源映射(若必须保留@EnableWebMvc)
如果业务必须使用@EnableWebMvc,需要在实现WebMvcConfigurer的类中手动添加静态资源映射规则。修改YamlSwaggerConfig类,重写addResourceHandlers方法:
@Configuration @EnableSwagger2 public class YamlSwaggerConfig implements WebMvcConfigurer { // 原有代码保持不变 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 映射swagger-apis路径到static下的对应目录 registry.addResourceHandler("/swagger-apis/**") .addResourceLocations("classpath:/static/swagger-apis/"); // 补充swagger-ui相关的静态资源映射 registry.addResourceHandler("/swagger-ui.html/**") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } }
额外检查项
- 确认
src/main/resources/static/swagger-apis/api1/swagger.yaml文件路径和名称完全正确,注意大小写(Linux/macOS环境区分大小写)。 - 重启Spring Boot应用,确保配置修改生效。
内容的提问来源于stack exchange,提问作者Ravi Dobariya
相关产品推荐
相关产品推荐

