これは、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"/>
が、それは助けにはなりませんでした。
アクセス拒否ハンドラは、他のケースでは正しく動作し、権限が不十分な要求があった場合にヒットするため、問題の一部であってはなりません。
この現象の原因は何ですか?