在scala Play框架中是否有一种快速的内置方式来转发请求
我在找像这样的东西在scala Play框架中是否有一种快速的内置方式来转发请求,scala,playframework,playframework-2.0,Scala,Playframework,Playframework 2.0,我在找像这样的东西 def proxy = Action.async { implicit req => //do something with req val newRequest = req.map( r = r.path = "http://newurl"); forward(newRequest) } 我看到有一个重定向方法,但它只允许我传递请求参数,而不允许传递所有其他内容、头等 我希望有内置的东西,这样我就不必自己构建了。我不确定这是否符合您的要求,但您是否已经研
def proxy = Action.async { implicit req =>
//do something with req
val newRequest = req.map( r = r.path = "http://newurl");
forward(newRequest)
}
我看到有一个重定向
方法,但它只允许我传递请求参数,而不允许传递所有其他内容、头等
我希望有内置的东西,这样我就不必自己构建了。我不确定这是否符合您的要求,但您是否已经研究过了 操作
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");
}
});
}
/**
*类似于内部重定向或代理。浏览器中的URL不可用
*改变。
*/
公共承诺转发到(字符串url){
承诺响应=WS.url(url.get();
返回response.map(新函数(){
应用公共结果(WS.Response响应){
//阻止浏览器缓存页面-这将是一个
//安全问题
response().setHeader(“缓存控制”,“无缓存,无存储”);
返回ok(response.getBody()).as(“text/html”);
}
});
}
(我正在使用Play 2.2.3)啊,对不起,我更新了它。我想把它转发到一个新的url,但是请求中的其他所有内容都是相同的播放实例提供的另一个url,或者它是远程的?怎么样?浏览器将发送所有cookie和标题,您可以使用新参数指定反向路由的url。它将不适用于其他请求GET@AndrzejJozwik重定向是否转发所有Cookie和标头?我不确定它是否有,这就是为什么我要避免它。重定向不应该保留cookie和头。如果您想将请求处理转发到Play app的其他组件/功能,您应该查看动作合成。