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

Spring Security OAuth资源服务:PUT请求Postman可用Axios返回401

问题分析与解决方案

核心问题:Axios PUT请求参数顺序错误

你前端的Axios PUT请求写法有误,导致Authorization头未被正确携带。Axios的put方法签名为:

axios.put(url[, data[, config]])

你把包含headers的配置对象放在了第二个参数(请求体的位置),而你的PUT接口不需要请求体,这就导致headers根本没被应用到请求上。后端没收到JWT令牌,自然会将请求判定为匿名,返回401。

修复前端请求代码

将headers移到第三个参数位置,第二个参数传null(因为接口不需要请求体):

async saveCurrentChanges() {
    await axios.put(
        "http://localhost:8080/api/test",
        null, // 无请求体时传null或空对象
        { headers: { "Authorization": "Bearer " + getAuth().currentUser.accessToken }}
    ).then((response) => {
        console.log("success");
    }).catch((error) => {
        console.log(error);
    });
},

补充:完善Spring Security的CORS配置

当前你使用的cors(Customizer.withDefaults())会复用Spring MVC的CORS配置,建议添加全局CORS配置类,明确允许携带自定义头、PUT方法等,避免预检请求失败:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:你的前端端口") // 替换为你的前端实际地址
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}

额外验证步骤

  1. 打开浏览器开发者工具的Network标签,查看PUT请求的Request Headers,确认Authorization头是否存在
  2. 检查getAuth().currentUser.accessToken是否获取到了有效、未过期的JWT令牌

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:57:03