You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:25:30