Spring Boot中为Swagger添加Bearer Token无效问题求助
问题原因与解决方案
你的配置仅在Swagger文档中标记了接口需要Bearer Token认证,但这只是文档层面的提示,并未启用实际的权限拦截逻辑,所以接口依然处于开放状态。以下是具体修复步骤:
1. 确保引入Spring Security依赖
先确认项目中已添加Spring Security的starter依赖(以Maven为例):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2. 添加Spring Security拦截配置
创建Security配置类,对目标接口启用认证校验:
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http // 前后端分离场景下关闭CSRF .csrf(csrf -> csrf.disable()) // 配置请求权限规则 .authorizeHttpRequests(auth -> auth // 允许Swagger相关路径无需认证,方便调试 .requestMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll() // 所有/api/v1/**路径必须经过认证 .requestMatchers("/api/v1/**").authenticated() // 其他路径默认开放 .anyRequest().permitAll() ) // 配置JWT作为Bearer Token的认证方式 .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())); return http.build(); } }
3. 统一Swagger认证名称
你在@SecurityScheme中定义的名称是"Bearer Authentication",但控制器@SecurityRequirement用的是"bearerAuth",两者不匹配会导致Swagger UI的认证按钮无法关联。需统一名称:
修改SwaggerConfig中的注解:
@SecurityScheme( name = "bearerAuth", // 和控制器中的名称保持一致 type = SecuritySchemeType.HTTP, bearerFormat = "JWT", scheme = "bearer" )
4. 验证效果
配置完成后重新测试接口:
- 未携带Token时,接口会返回
401 Unauthorized - 携带有效JWT Token时,才能正常获取200响应
内容的提问来源于stack exchange,提问作者MA-Dev
相关产品推荐
相关产品推荐

