【问题标题】:access-control-allow-origin on playframeworkplayframework 上的访问控制允许来源
【发布时间】:2013-02-21 18:14:09
【问题描述】:

如何让 playframework 允许非源调用?我曾尝试将 @Before 方法添加到控制器,但从未被 ajax 客户端调用。

@Before 
public static void setCORS()
{
    Http.Response.current().accessControl("*", "GET,PUT,POST,DELETE", true);
}

我正在尝试设置一个测试 API 服务器供客户端开发人员进行测试,但这似乎需要禁用 Origin 限制。

其他人有这个工作吗?或以不同的方式完成此任务?

更新: 我找到了这篇关于这个话题的文章 http://javathought.wordpress.com/2011/12/04/cross-origin-resource-sharing-with-play-framework/

【问题讨论】:

  • 您是在尝试从其他域调用 play-project 还是以其他方式调用?
  • 我正在尝试从另一个域调用 play。具体来说,我正在托管服务器上设置测试播放,并在本地桌面上开发 Web 客户端。我正在尝试设置开发环境。

标签: playframework same-origin-policy


【解决方案1】:

检查您的浏览器正在尝试做什么,它可能会首先发送一个 OPTION 请求来检查允许的内容,这称为“预检请求”。

此外,将 Access-Control-Allow-Origin 设置为 * 仅在没有凭据的情况下有效。

【讨论】:

  • 这是一个很好的阅读页面,developer.mozilla.org/en/http_access_control
  • 谢谢你。有没有办法让 Play 将这些标题放在每次通话中?选项检查返回 404,可能是因为 GET、PUT、POST、DELETE 调用被路由但不是 OPTIONS 动词。
  • 您必须在您的 routes.conf 文件中添加一个 OPTION 路由,如果它在您的应用中有意义,您可以使用通配符来覆盖尽可能多的内容。
【解决方案2】:

使用自定义路由器可以解决这个问题。

例如使用:https://github.com/teamon/play-navigator

val rget = GET on "foo" to App.foo
val gpost = POST on "foo" to App.foo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2018-12-04
    • 2016-01-02
    • 2017-12-15
    • 2016-08-18
    相关资源
    最近更新 更多