【问题标题】:Is there a quick built in way to forward a request in the scala Play framework在 scala Play 框架中是否有一种快速的内置方式来转发请求
【发布时间】:2015-07-02 00:10:17
【问题描述】:

我正在寻找类似的东西

def proxy = Action.async { implicit req =>
  //do something with req
  val newRequest = req.map( r = r.path = "http://newurl");
  forward(newRequest)
}

我看到有一个redirect 方法,但它只允许我传递请求参数,而不是其他所有内容、标头等。

我希望有一些内置的东西,所以我不必自己构建它。

【问题讨论】:

  • 啊抱歉我更新了。我想将它转发到一个新的 url,但请求中的其他所有内容都相同
  • 另一个 url 是由同一个播放实例提供服务,还是远程服务?
  • Redirect 怎么样?浏览器将发送所有 cookie 和标头,您可以使用新参数从反向路由中指定 url。它不适用于其他请求然后 GET
  • @AndrzejJozwik 重定向是否转发所有 cookie 和标头?我不确定它确实如此,这就是我避免它的原因。
  • 重定向不应该保留 cookie 和标头。如果您想将请求处理转发到 Play 应用的另一个组件/功能,您应该查看 Action 组合。

标签: scala playframework playframework-2.0


【解决方案1】:

我不确定这是否符合您的要求,但您是否看过Play's WS

动作forwardTo 获取一个url,获取相应的页面并将其作为该请求的响应返回。它不完全像 Spring 框架中的前锋,但它为我完成了这项工作。

/**
 * Like an internal redirect or an proxy. The URL in the browser doesn't
 * change.
 */
public Promise<Result> forwardTo(String url) {
    Promise<WS.Response> response = WS.url(url).get();
    return response.map(new Function<WS.Response, Result>() {
        public Result apply(WS.Response response) {
            // Prevent browser from caching pages - this would be an
            // security issue
            response().setHeader("Cache-control", "no-cache, no-store");
            return ok(response.getBody()).as("text/html");
        }
    });
}

(我使用的是 Play 2.2.3)

【讨论】:

    猜你喜欢
    • 2022-10-22
    • 2016-11-13
    • 1970-01-01
    • 2013-04-21
    • 2019-03-13
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多