2016-12-01 1 views
0

これは、Springセキュリティも使用される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'"/> 

不正な要求は、私は/user/save要求だけROLE_OPERATORを持つ作るとき、私は次の警告を得る

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

によって処理されます:

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() { 
    ... 
} 

解決済み

関連する問題