【发布时间】:2023-03-21 10:13:02
【问题描述】:
目前我有一个适用于 HTTP 和 HTTPS 的 API,但即使使用 HTTP 调用 URL,我也需要它来路由到 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)))
}
}
}
}
}
}
先试一试:
def marketsRoute = {
scheme("http") {
extract(_.request.uri) { uri =>
redirect( uri.withScheme("https"),
StatusCodes.MovedPermanently
)
}
} ~
pathPrefix("markets") {
pathEnd{
logRequestResult("Read a waitlist enable 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)))
}
}
}
}
}
}
【问题讨论】:
-
这能回答你的问题吗? Akka HTTP 2.0 to use SSL (HTTPS)
-
不,我不这么认为。正如我在原始问题中所说,我认为我不需要答案所依赖的 httpsContext。