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

Spring Security无法访问/api/auth/user(禁用WebSecurityConfigurerAdapter)

解决/api/auth/user接口401 Unauthorized错误的方案

1. 修复控制器参数绑定错误

你的AuthController中registerUser方法使用了多个@RequestBody注解,这是错误的——Spring MVC仅允许一个请求对应一个请求体,无法同时解析多个@RequestBody参数。这会导致请求参数绑定失败,进而引发非预期的错误(可能被误判为401)。

修复方式:创建一个DTO类统一接收注册参数:

public class RegisterRequest {
    private String name;
    private String username;
    private String password;

    // Getters and Setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
}

然后修改控制器方法:

@PostMapping("/user")
public ResponseEntity<?> registerUser(@RequestBody RegisterRequest request) {
    if(StringUtils.isBlank(request.getName()) || StringUtils.isBlank(request.getUsername()) || StringUtils.isBlank(request.getPassword())) {
        return ResponseEntity.badRequest().build();
    }

    return userService.registerUser(request.getName(), request.getUsername(), request.getPassword());
}

2. 验证Security配置的正确性

你的SecurityConfiguration中/api/auth/**的permitAll配置本身合规,可做以下优化确保无遗漏:

  • 明确限定请求方法:如果该接口仅接收POST请求,可在requestMatchers中指定方法,避免其他请求方法被误拦截:
.requestMatchers(HttpMethod.POST, "/api/auth/**").permitAll()
  • 排查全局过滤器干扰:检查项目中是否存在自定义Filter,会提前拦截请求并返回401。

3. 排查请求本身的问题

  • 清理多余请求头:确保请求没有携带Authorization头信息,否则Spring Security会尝试认证未注册用户,直接返回401。
  • 校验请求路径与方法:确认请求是POST /api/auth/user,而非GET或拼写错误的路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:55:19