Spring Security无法访问/api/auth/user(禁用WebSecurityConfigurerAdapter)
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
相关产品推荐
相关产品推荐

