【问题标题】:Play framework: redirect to a different domain播放框架:重定向到不同的域
【发布时间】:2014-09-09 11:59:21
【问题描述】:

我正在使用带有 Java 的 Play 2,我的控制器方法之一返回 redirect

return redirect(<some other domain>);

客户端调用从角度控制器通过$http

$http.get("/signin").
    ...

这不起作用; Firefox 告诉我启用 CORS。因此,我尝试按照StackOverflow question 的答案建议启用 CORS。但我仍然得到同样的错误。然而,这个答案似乎是针对 JSON 响应的。我需要为重定向做任何不同的事情吗?

我原以为将 Access-Control-Allow-Origin 设置为 * 可以解决问题,但这似乎不起作用。

【问题讨论】:

  • 您能否详细介绍一下您执行此重定向的方式? CORS 与 AJAX 相连。简单的重定向应该可以正常使用普通的 http 调用。
  • 控制器方法发出此调用:return redirect("https://api.twitter.com/oauth/authenticate?oauth_token=" + requestToken.getToken());
  • 我想问的是如何调用返回重定向的操作?
  • 我已经编辑了帖子。

标签: java redirect cors playframework-2.0


【解决方案1】:

Http 3xx 重定向响应对 AJAX 调用是透明的。此问题的一种可能解决方案是返回可以由 AJAX 解决的 303 以外的其他内容。例如,您可以假设来自您的应用程序的代码为 280 的所有响应都用于 AJAX 重定向。然后你的控制器看起来像这样:

public class Application extends Controller {

    public static Result signin() {
        // ...
        return status(280, "https://api.twitter.com/oauth/authenticate?oauth_token=" + requestToken.getToken());
    }

}

在客户端,您可以检查结果状态代码并对代码 280 做出反应。下面是一个带有页面重定向的简单示例,但您可以对该响应执行任何您喜欢的操作。

<script>
    $(function() {
        $.ajax({'url': '/signin', statusCode: {
            280: function(response) {
                window.location = response;
            }
        }});
    });
</script>

【讨论】:

    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多