[目前,我有一个可同时用于HTTP和HTTPS的API,但是即使URL是使用HTTP调用的,我也需要将它路由到HTTPS。例如,两者都在工作:
http://app1_0.cloud.example.net/getSomething
https://app1_0.cloud.example.net/getSomething
Akka文档中有一些关于为证书添加httpscontext
的内容,但是我不确定是否需要这样做,因为我已经在使用HTTPS。这就是它被称为的路线:
Http().bindAndHandle(aliveResponse ~ route, host, port)
host
和port
在application.conf
中定义。
是否有一种方法可以仅添加重定向或强制转换以确保将其发送到HTTPS?
def marketsRoute = {
pathPrefix("markets") {
pathEnd{
logRequestResult("Read markets", akka.event.Logging.InfoLevel) {
get {
implicit val timeout = Timeout(20, TimeUnit.SECONDS)
val sitesResp = WaitListDAO.getMarkets
complete(HttpResponse( entity = HttpEntity(MediaTypes.`application/json`, sitesResp.toJson.toString)))
}
}
}
}
}
}
除非HTTPS服务器也在同一应用程序中被bindAndHandle
编辑,否则您无需定义HttpsConnectionContext
。
HTTPS重定向的路由(从此相关的blog post
中提取)应如下所示:
blog post
请注意,如果您使用标准HTTPS端口(即443),则不需要val route =
scheme("http") {
extract(_.request.uri) { uri =>
redirect( uri.withScheme("https").withAuthority(hostName, portHttps),
StatusCodes.MovedPermanently
)
}
}
。