默认, 在满足下面三个条件的情况下,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"
}
问题解决。