spring MVC中的CSRF(跨站点请求伪造)保护


问题内容

我对spring的CSRF(跨站点请求伪造)保护不感到困惑。不,我有我的jsp,控制器和Web服务。我想做的是在Web服务级别上验证令牌,如果令牌匹配,则运行Web服务(在我的情况下,执行db
insert)

JSP文件

    <form:input type="text" class="form-control" path="mName" />

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

    <div class="form-action">
        <input type="submit" value="Save" class="btn btn-primary" />
    </div>
</form:form>

我也插入了隐藏标签。现在我该怎么做才能验证此令牌。我在那儿迷路了。

在控制器类中,我将值从表单获取到对象,然后调用Web服务来保存数据

@RequestMapping(method = RequestMethod.POST)
  public String processForm(@ModelAttribute(value = "userForm") @Valid UserForm userForm, BindingResult result, ModelMap model) {

   //call the web service
  }

问题答案:

显然我正在使用spring security 3.1.4.RELEASE 。在这里,您可以手动执行此操作。然后我将其更改为
3.2.2.RELEASE ,然后只需要使用

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

参考此链接以查看Spring Security 3.2的新增功能

http://docs.spring.io/spring-
security/site/docs/3.2.0.RELEASE/reference/htmlsingle/#new

注意,当您从3.1.4.RELEASE更改为3.2.2.RELEASE时,会有很多令人困惑的重构。特别是在 web.xmlspring-
security.xml
文件中