2015-07-19 105 views
0

今天早上我正在更新项目的外部库。我一次只做了一个这样的库,所以如果出现问题,我确实知道是什么更新引起的。春季安全4.0.1不支持请求方法'POST'

在我将3.2版本的spring安全性升级到4.0.1.RELEASE后,问题开始了。看来我不能提交任何形式的文章中,我总是得到错误信息:

HTTP Status 405 - Request method 'POST' not supported 

我证实,我的映射是正确的,并接受邮政:

2015-07-19 13:03:21,916 [  Thread-1] INFO n.RequestMappingHandlerMapping   - Mapped "{[/_/account/add],methods=[POST]}" onto public java.lang.String com..web.AccountController.add(com..web.data.Account,org.springframework.validation.BindingResult,org.springframework.ui.Model,org.springframework.web.servlet.mvc.support.RedirectAttributes,javax.servlet.http.HttpServletRequest) 
2015-07-19 13:03:21,916 [  Thread-1] INFO n.RequestMappingHandlerMapping   - Mapped "{[/_/account/add],methods=[GET]}" onto public java.lang.String com..web.AccountController.add(com..web.data.Account,org.springframework.ui.Model) 

我高度怀疑这是关系到从3.2到4.0.1的春季安全性的升级,因为一切都在3.2正确工作。

有人在使用spring security 4.0.1时知道是什么原因导致“请求方法”POST'不支持“吗?

回答

2

糟糕,我应该阅读“最新消息”文档好一点。看来CSRF在Spring Security 4.0.1中默认启用。将csrf标记添加为隐藏字段的诀窍是:

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> 
+0

你确定你的问题解决了吗?我记得CSRF的问题,如果它没有提供,或者过期的提供到目前为止,它会抛出403(拒绝访问不是405)。 – Aubergine

+1

@Aubergine tomcat确实在这里显示了“HTTP状态405 - 请求方法”POST'不支持',这可能是由我的配置引起的。但是用csrf标记我再也看不到这个错误了。虽然需要更多的疑惑,但升级到4.0.1并不像我想象的那么容易。 – TinusSky

+1

如果您使用logback配置,请尝试设置记录器级别以进行调试/跟踪: 这节省了我,并一直为我节省了很多时间因为春天可以告诉你一个相当详细的故事。 – Aubergine