【问题标题】:Spring security 4.0.1 Request method 'POST' not supported不支持 Spring security 4.0.1 请求方法“POST”
【发布时间】:2015-07-19 19:19:28
【问题描述】:

今天早上我正在更新我的一个项目的外部库。我一次只做一个库,所以如果出了问题,我确实知道是什么更新导致了它。

在我将 spring security 从 3.2 升级到 4.0.1.RELEASE 之后,问题就开始了。看来我无法使用 POST 提交任何表单,我总是收到错误消息:

HTTP Status 405 - Request method 'POST' not supported

我确认我的映射正确并接受 POST:

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)

我高度怀疑这与 spring-security 从 3.2 升级到 4.0.1 有关,因为在 3.2 中一切正常。

有人知道使用 spring security 4.0.1 时“不支持请求方法'POST'”的原因吗?

【问题讨论】:

    标签: java spring-security


    【解决方案1】:

    糟糕,我应该更好地阅读“新增功能”文档。似乎在 spring security 4.0.1 中默认启用了 CSRF。将 csrf 令牌添加为隐藏字段就可以了:

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

    【讨论】:

    • 你确定你的问题已经解决了吗?我记得 CSRF 有问题,如果我记得没有提供或提供过期的,它会抛出 403(访问被拒绝而不是 405)。
    • @Aubergine tomcat 在这里确实显示了“HTTP 状态 405 - 不支持请求方法'POST'”,可能是我的配置引起的。但是使用 csrf 令牌我再也看不到错误了。虽然还需要一些令人费解的地方,但升级到 4.0.1 并没有我想象的那么容易。
    • 如果您使用 logback 配置,请尝试将记录器级别设置为调试/跟踪: 这救了我,并一直救了我这么多时间,春天可以告诉你一个相当详细的故事。
    • @Aubergine 不错!已经为我节省了很多时间。发现问题:请求 'GET /_/login/logout' 与 'POST /_/login/logout 不匹配;看来你不能再使用 GET 注销可能是因为 csrf,让我们多搜索一下如何解决这个问题。
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2020-08-12
    • 2017-02-25
    • 2016-06-16
    相关资源
    最近更新 更多