我使用Spring MVC 3.2实现了REST服务。使用DIGEST身份验证的标准安全约束来保护所有URL:
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure</web-resource-name>
<url-pattern>/update/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>update</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Secure</realm-name>
</login-config>
我只实现了GET,HEAD和OPTIONS操作,因此我希望所有剩余的操作都返回405 - 不支持Request方法。
理论上,这是默认行为,如果我不使用安全约束保护webapp,它就可以工作。但是,使用受保护的Web应用程序,PUT和DELETE返回403,PATCH操作返回501.其余操作按预期工作。
调试我已经看到,在这些情况下,请求没有到达Spring DispatcherServlet,所以我猜它必须是Tomcat的奇怪之处。顺便说一下,我使用的是Tomcat 7,但我已经看到了与Tomcat 6相同的行为。