在运行时获取 Akka HTTP 版本



我的服务器建立在Akka HTTP之上。如果我不设置 Server 标头,Akka 将自动添加外部可配置的默认值 akka-http/10.1.8。我知道如何通过在整个路由树周围添加 respondWithHeaders 指令来用我自己的服务器覆盖它:

   respondWithHeaders(Server(myProductVersion)) {
      // my routs here
   }

这按预期工作;服务器响应标头现在读取我的产品。我想要的是包括 akka 的标头,因为我喜欢它并且不介意告诉全世界我的服务器堆栈。给定Server.apply方法的签名,我应该能够像这样做:

   respondWithHeaders(Server(myProductVersion, akkaProductVersion)) {
      // my routs here
   }

。我的问题是我不知道如何获得那个akkaProductVersion对象!

尝试像这样读取akka.http.version配置属性

system.settings.config.getString("akka.http.version")

所以你可以试试

Server(
  myProductVersion, 
  system.settings.config.getString("akka.http.version")
)

根据默认配置

    # The default value of the `Server` header to produce if no
    # explicit `Server`-header was included in a response.
    # If this value is the empty string and no header was included in
    # the request, no `Server` header will be rendered at all.
    server-header = akka-http/${akka.http.version}

我们可以看到 akka-http 在构造ServerSettings时如何读取server-header

c.getString("server-header").toOption.map(Server(_)),

最新更新