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

Spring Security POST /error返回405 METHOD_NOT_ALLOWED错误求助

问题排查与修复方案

核心错误原因

  • 1 注册提交接口未指定请求方法:UserController中处理注册逻辑的addUser方法使用@RequestMapping时未指定method = RequestMethod.POST,而同路径/registration已存在明确的@GetMapping方法,Spring MVC会判定该路径仅支持GET请求,POST表单提交时直接触发405方法不允许错误。
  • 2 安全配置放行规则不匹配:WebSecurityConfig中配置的放行规则*/registration/*仅能匹配路径中间包含/registration/的请求(如/user/registration/edit),直接提交到/registration的POST请求不在放行范围内,属于潜在的拦截隐患。
  • 3 接口返回配置不符合实际需求:addUser方法指定了produces返回JSON/XML格式,但方法返回值为void,且表单提交场景需要页面跳转,该配置会增加请求匹配失败的概率。

具体修复步骤

步骤1:修正控制器注册接口映射

将addUser方法的映射注解替换为@PostMapping,移除不必要的配置,增加注册成功后的重定向逻辑:

// 替换原来的@RequestMapping注解即可,其余逻辑不变
@PostMapping("/registration")
public String addUser(@RequestParam Map<String, String> body) {
    User user = new User();
    user.setUsername(body.get("username"));
    user.setPassword(passwordEncoder.encode(body.get("password")));
    user.setAccountNonLocked(true);
    userDetailsManager.createUser(user);
    // 注册成功后跳转到登录页
    return "redirect:/login";
}

步骤2:修正安全配置的放行规则

修改WebSecurityConfig中的antMatcher规则,确保/registration路径的所有请求都放行:

// 替换原有antMatchers配置
.antMatchers("/", "/index","/registration").permitAll()

可选优化:实体类接收表单参数

可以直接用@ModelAttribute接收表单提交的User对象,简化代码:

@PostMapping("/registration")
public String addUser(@ModelAttribute User user) {
    user.setPassword(passwordEncoder.encode(user.getPassword()));
    user.setAccountNonLocked(true);
    userDetailsManager.createUser(user);
    return "redirect:/login";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:15:04