Java Play Framework 2.6 不返回“Access-Control-Allow-Origin”CORS 标头
Posted
技术标签:
【中文标题】Java Play Framework 2.6 不返回“Access-Control-Allow-Origin”CORS 标头【英文标题】:Java Play Framework 2.6 does not return `Access-Control-Allow-Origin` CORS header 【发布时间】:2019-03-31 11:59:14 【问题描述】:Play 不支持我的 application.conf
配置以返回 Access-Control-Allow-Origin
标头。当我从 Ajax 发送请求时,响应总是:
Failed to load http://localhost:9000/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
这就是我的application.conf
的样子:
# disable the built in filters
play.http.filters = play.api.http.NoHttpFilters
play.filters.enabled += "play.filters.cors.CORSFilter"
play.filters
cors
# The allowed origins. If null, all origins are allowed.
allowedOrigins = null
我成功通过 Ajax 请求的唯一方法是在控制器中添加行 response().setHeader("Access-Control-Allow-Origin", "*");
。但我想通过application.conf
来完成,所以我不必在所有控制器中添加这个setHeader()
代码。
public class HomeController extends Controller
public Result index()
// this is the only hack that works
//response().setHeader("Access-Control-Allow-Origin", "*");
return ok(
Json.toJson("A long time ago in a galaxy far, far away....")
);
我的 Ajax 请求如下所示:
$.ajax(
url: "http://localhost:9000",
type: "GET",
dataType: 'json',
success: function(_out)
alert(_out);
,
fail: function()
alert("error");
);
为什么 Play 不支持我的 CORS application.conf
配置?
【问题讨论】:
【参考方案1】:我已经确定了问题。在我的application.conf
:
play.http.filters = play.api.http.NoHttpFilters
play.filters.enabled += "play.filters.cors.CORSFilter"
这两行不是相加的。换句话说,第一行禁用所有过滤器,第二行启用一个过滤器,但最终结果仍然是所有过滤器都被禁用(即使启用是在禁用之后)。
【讨论】:
以上是关于Java Play Framework 2.6 不返回“Access-Control-Allow-Origin”CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章
Scala Play Framework 2.6密封特征格式给Json
Play Framework 2.6 中未触发 Slick (postgresql) 演变
Play Framework Java - 包 play.db 不存在