【问题标题】:Redirect Akka HTTP to HTTPS将 Akka HTTP 重定向到 HTTPS
【发布时间】: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)

hostportapplication.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。

标签: scala https akka-http


【解决方案1】:

除非 HTTPS 服务器也在同一个应用程序中被 bindAndHandle-ed,否则您不需要定义 HttpsConnectionContext

HTTPS 重定向的路由(从相关的blog post 中提取)应如下所示:

val route =
  scheme("http") {
    extract(_.request.uri) { uri =>
      redirect( uri.withScheme("https").withAuthority(hostName, portHttps),
        StatusCodes.MovedPermanently
      )
    }
  }

请注意,如果您使用标准 HTTPS 端口(即 443),则不需要 .withAuthority()

【讨论】:

  • 知道了,我刚刚添加了一条路线作为示例,所以我需要添加你放在那里的内容?好吧,真的只是添加方案,然后在重定向后完成?
  • @Kooky_Lukey,类似于链接博客文章中的示例代码,您可以使用波浪号组合符(即~)简单地链接您的其他路由/路径匹配器(如果有)。
猜你喜欢
  • 1970-01-01
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2013-11-05
  • 2012-11-02
相关资源
最近更新 更多