为了账号安全,请及时绑定邮箱和手机立即绑定

凭据错误的 POST 请求返回 405 而不是 401

凭据错误的 POST 请求返回 405 而不是 401

大话西游666 2023-06-14 14:01:52
我正在尝试在由 Spring Security 保护的 Spring 中创建新的 POST 端点。端点正在工作。如果我提供正确的数据和凭据,服务器会处理请求并返回 200。如果我提供的凭据不正确,我会得到 405,我预计会得到 401。我还尝试将控制器的请求方法从 POST 更改为 GET,并将请求从 POST 更改为 GET,并且成功了!对于错误的凭据,a 收到 401,对于正确的凭据,收到 200。这是我的配置:控制器@Controller@RequestMapping(value = "/api/v1")@Secured(UserRoles.ROLE_USER)public class ApiController {    @RequestMapping(value = "/test", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)    @ResponseStatus(value = HttpStatus.OK)    @ResponseBody    public ResponseEntity<String> handleRequest(@RequestBody DataBody dataBody, Model model, Locale locale) {        try{            //do something            return new ResponseEntity<>("received", HttpStatus.OK);        } catch (SomeProblemException e) {            return new ResponseEntity<>(e.toString(), HttpStatus.BAD_REQUEST);        }    }HTTP 请求(邮递员)POST /api/v1/test HTTP/1.1Host: localhost:8080Content-Type: application/jsonAuthorization: Basic bWFudGfmZjptYW50YQ==User-Agent: PostmanRuntime/7.15.2Accept: */*Host: localhost:8080{    "something": "data",    "somethingelse": "data"}HTTP 响应(邮递员)Status 405WWW-Authenticate: Basic realm="Spring Security Application"Allow: GET我使用 Spring Security 3.2.10-RELEASE。我尝试启用 Spring Security 日志,但我失败了。
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

问题出在这里:


@Controller

public class ErrorController {

    @RequestMapping("/error")

    public String error(@RequestParam(value = "err", required = false) Integer paramErrorCode, Locale locale,

            ModelMap model, HttpServletRequest httpRequest) {

         // Do something   

     }

我有一个控制器,它处理错误屏幕,但它只支持 GET 方法。当我将其同时更改为 GET 和 POST 时,它开始工作了。


解决方案:


@Controller

public class ErrorController {

    @RequestMapping(value = "/error" method = {RequestMethod.GET, RequestMethod.POST})

    public String error(@RequestParam(value = "err", required = false) Integer paramErrorCode, Locale locale,

            ModelMap model, HttpServletRequest httpRequest) {

         // Do something   

     }

如果web.xml不确定是什么导致重定向


<error-page>

    <location>/error</location>

</error-page>

或 securitycontext.xml


<sec:access-denied-handler error-page="/error?err=403"/>


查看完整回答
反对 回复 2023-06-14
?
BIG阳

TA贡献1859条经验 获得超6个赞

       METHOD_NOT_ALLOWED(405, "Method Not Allowed")

似乎您在测试时使用的是 GET 方法而不是 POST 方法,一旦您更改为 POSt 将获得下一个异常是

       UNAUTHORIZED(401, "Unauthorized")


查看完整回答
反对 回复 2023-06-14
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信