本文介绍了播放框架2:查看应用程序是在http上运行还是在HTTPS上运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试找出Play 2(带有Scala)应用程序是否在http或HTTPS上运行
我尝试这样处理routes.Application.index.absoluteURL(request),
def chatUri(username: String)(implicit request: RequestHeader): String = {
val uri = routes.Application.index.absoluteURL(request)
但我收到以下错误:
/home/sas/tmp/websocket-chat/app/controllers/Application.scala:51: overloaded method value absoluteURL with alternatives:
[error] (secure: Boolean)(implicit request: play.api.mvc.RequestHeader)java.lang.String <and>
[error] (play.mvc.Http.Request)java.lang.String
[error] cannot be applied to (play.api.mvc.RequestHeader)
[error] val rootUri = Uri(routes.Application.index.absoluteURL(request))
我尝试将RequestHeader转换为请求,但收到以下错误
val rootUri = Uri(routes.Application.index.absoluteURL(request.asInstanceOf[Request[Any]]))
(secure: Boolean)(implicit request: play.api.mvc.RequestHeader)java.lang.String <and>
[error] (play.mvc.Http.Request)java.lang.String
[error] cannot be applied to (play.api.mvc.Request[Any])
[error] val rootUri = Uri(routes.Application.index.absoluteURL(request.asInstanceOf[Request[Any]]))
您知道我如何才能做到这一点吗?
推荐答案
我必须说,我对在Scala中获取绝对URL的问题感到惊讶,尽管在Java中它工作得很好,但无论如何……我怀疑它是否会帮助您确定协议(编辑:正如@MariusSoutier所写)
因为在实演2中有no built-in support for SSL,所以很可能您正在(或应该使用)某个HTTP服务器在您的应用程序前面,我们假设您使用的是Apache.有一些示例和帖子描述了这一过程:
- 查看主题:How to config PlayFramework2 to support SSL?纳斯尔给出了一个将阿帕奇配置为播放代理的示例
- configuring Apache as a proxy也有很好的描述(警告帖子描述了Play 1.x,但Apache部分将是相同的)
- 最后,您需要将proper headers which will be forwarded设置为您的应用
因此,在设置标头之后(如第3点所示),您将能够在控制器中检查它:
def index = Action { request =>
val proto = request.headers("X-FORWARDED-PROTO")
Ok("Got request [" + request + "] with schema: " + proto )
}
或与Java控制器相同:
public static Result index() {
String proto = request().getHeader("X-FORWARDED-PROTO");
return ok("Got request [" + request() + "] with schema: " + proto);
}
这篇关于播放框架2:查看应用程序是在http上运行还是在HTTPS上运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!