Spring拦截器已排除登录接口仍报POST请求不支持跳转/error问题
错误原因
- Controller层
/adminapi/login接口未显式声明支持POST请求,或拦截器未登录跳转逻辑使用重定向,导致原POST请求被自动转为GET请求,与接口支持的请求方法不匹配 - 拦截器排除路径配置未生效,
/adminapi/login请求仍被拦截,触发拦截器的重定向逻辑
解决方案
- 修正Controller接口请求方法配置
显式指定登录接口支持POST请求,代码示例:
@RequestMapping(value = "/adminapi") public class AdminController { // 写法1:使用PostMapping注解 @PostMapping("/login") public String login(){ // 业务逻辑 } // 写法2:指定@RequestMapping的method属性,兼容多种请求方法 // @RequestMapping(value = "/login", method = {RequestMethod.POST, RequestMethod.GET}) }
- 调整拦截器未登录处理逻辑
拦截器preHandle方法中如果校验未登录,不要对接口请求使用response.sendRedirect重定向:
- 前端异步请求:直接返回JSON格式的未登录错误提示,状态码设为401即可
- 页面同步请求:跳转的页面地址需提前加入拦截器排除列表,且确认页面路径支持GET请求
- 验证拦截器配置生效
在拦截器preHandle方法开头添加日志打印请求URI,确认/adminapi/login请求确实跳过了拦截逻辑,避免配置拼写错误、路径匹配规则不对导致排除不生效。
内容的提问来源于stack exchange,提问作者kkmonster
相关产品推荐
相关产品推荐

