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 楼答案
在我的例子中,问题出在
/denied
请求的控制器方法中。它有一个GET版本,但不是POST版本。添加一个如下的帖子版本:解决了这个问题