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

Swagger3测试Bearer token接口返回401、Postman正常该如何配置?

Swagger3 Bearer Token 401问题解决方案

问题根因

你已排查出核心问题是Swagger发起请求时,Authorization请求头只传入了token值,未自动拼接Bearer 前缀,导致后端鉴权逻辑解析失败返回401。

解决方案:修改Swagger配置类

需要在原有SwaggerConfig.java的Docket Bean配置中补充安全模式和安全上下文配置,完整修改后代码如下:

/**
 * Configuration settings for Swagger
 */
@Configuration
public class SwaggerConfig {

    @Autowired
    BuildProperties buildProperties;

    @Value("${swagger-docs.host}")
    String host;

    @Value("${swagger-docs.protocols}")
    String protocols;

    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2) // 完全适配Swagger3可改为 DocumentationType.OAS_30
                .apiInfo(
                        new ApiInfoBuilder()
                                .title(buildProperties.getName())
                                .version(buildProperties.getVersion())
                                .build())
                .host(host)
                .protocols(new HashSet<>(Arrays.asList(protocols.split(","))))
                .useDefaultResponseMessages(false)
                // 新增安全配置开始
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts())
                // 新增安全配置结束
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.demo.example"))
                .paths(PathSelectors.any())
                .build()
                .tags(new Tag("API", "API Demo Example"));
    }

    // 配置认证规则:指定从header的Authorization字段获取token,自动拼接Bearer前缀
    private List<SecurityScheme> securitySchemes() {
        ApiKey apiKey = new ApiKey("JWT", "Authorization", "header");
        return Collections.singletonList(apiKey);
    }

    // 配置认证规则生效范围:所有接口都生效
    private List<SecurityContext> securityContexts() {
        return Collections.singletonList(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .forPaths(PathSelectors.any())
                        .build()
        );
    }

    // 配置全局认证权限范围
    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] scopes = new AuthorizationScope[1];
        scopes[0] = authorizationScope;
        return Collections.singletonList(new SecurityReference("JWT", scopes));
    }
}

生效验证

配置完成重启项目后,打开Swagger UI页面按以下步骤操作:

  1. 点击页面右上角的Authorize按钮
  2. 在弹出框的输入框中直接填写token值(不需要手动加Bearer 前缀)
  3. 点击Authorize保存后再调用接口,即可正常携带符合要求的Authorization请求头,返回200响应

内容的提问来源于stack exchange,提问作者Kurtiss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:24:02