Это происходит в приложении Spring MVC, где также используется Spring Security. Я настроил запрос с отображением «/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"/>
Когда я делаю /user/save
запрос, имеющим только ROLE_OPERATOR
я получаю следующее предупреждение :
WARN http-nio-8080-exec-20 servlet.PageNotFound:208 - Request method 'POST' not supported
и /denied
не попасть. Зачем?
Ответы на подобные проблемы предлагают настроить csrf для POST-запросов, но запросы 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"/>
, но это не помогло.
Обработчик доступа запрещен правильно работает в других случаях, получает удар, когда запросы сделаны с недостаточными привилегиями, так что это тоже не должно быть проблемой.
Что может вызывать такое поведение?