默认, 在满足下面三个条件的情况下,Play框架会做一CSRF(跨站点请求伪造) 的检查:

  • 请求方法不是GET, HEAD 或 OPTIONS.
  • 情求包含Cookie或者Authorization头.
  • play没有配置CORS过滤相信请求

通过如下配置,可以pass  CSRF检查:

play.filters.csrf.header.bypassHeaders {
X-Requested-With = "*"   // X-Requested-With头域表示请求是通过Ajax发的,就会pass CSRF 检查
Csrf-Token = "nocheck"  // 这个也会pass CSRF检查
}

-----------------------------------------------------------------分割线-------------------------------------------------------------------------------

我遇到的问题是:前端的两个请求, 成功的request 不带cookie, 不成功的带了cookie(相对路径), 而后端对于有cookie的会执行检查。我做了如下尝试:
play.filters.csrf.header.bypassHeaders {
X-Requested-With = "*"
Csrf-Token = "nocheck"
}

问题解决。