有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java POST请求获得405响应,而不是由accessdeniedhandler处理

这发生在Spring MVC应用程序中,其中也使用了Spring安全性。我已使用映射“/user/save”配置了请求,以便只有管理员可以访问它:

<intercept-url pattern="/user/save/**" access="hasAnyAuthority('ROLE_ADMIN')"/>
<intercept-url pattern="/user/**" access="hasAnyAuthority('ROLE_ADMIN','ROLE_OPERATOR'"/>

未经授权的请求由

<access-denied-handler error-page="/denied"/>

当我发出/user/save请求时,我得到以下警告:

WARN http-nio-8080-exec-20 servlet.PageNotFound:208 - Request method 'POST' not supported

而且/denied不会被击中。为什么

解决类似问题的方法是为POST查询配置csrf,但POST查询适用于ROLE_ADMIN,所以这不应该是这里的问题

我尝试在安全配置中指定方法类型,如下所示:

<intercept-url pattern="/user/save/**" access="hasAnyAuthority('ROLE_ADMIN')" method="GET"/>
<intercept-url pattern="/user/save/**" access="hasAnyAuthority('ROLE_ADMIN')" method="POST"/>

但这没用

拒绝访问处理程序在其他情况下工作正常,在权限不足的情况下发出请求时会受到攻击,因此这也不应该是问题的一部分

什么会导致这种行为


共 (1) 个答案

  1. # 1 楼答案

    在我的例子中,问题出在/denied请求的控制器方法中。它有一个GET版本,但不是POST版本。添加一个如下的帖子版本:

    @RequestMapping(value = "/denied", method = RequestMethod.POST)
    public @ResponseBody Response userAccessDeniedForPost() {
        ...
    }
    

    解决了这个问题