2016-12-01 67 views
0

這發生在也使用Spring Security的Spring MVC應用程序中。我已經配置了映射「/user/save」的要求,以便只有管理員可以訪問它:POST請求獲取405響應,而不是由訪問拒絕處理程序處理

<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"/> 

處理當我做只是有ROLE_OPERATOR/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版本。添加如下的POST版本:

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

解決了這個問題。