gpt4 book ai didi

java - 如何从 http 或 https 请求中获取带有端口的主机名

转载 作者:IT老高 更新时间:2023-10-28 21:21:09 27 4
gpt4 key购买 nike

我有两个应用程序部署在一个 JBoss 容器(同一个 unix 盒子)中。如果我收到来自 app1 的请求,我需要为 app2 发送相应的请求。

示例:如果 app1 请求:http://example.com/context?param1=123,然后我需要提取 http://example.com/,以便我可以发送第二个应用的请求。

我尝试过使用

  HttpServletRequest.getServerName() & 
HttpServletRequest.getServerPort() & \
HttpServletRequest.getHeader("host")

但我如何区分 httphttps

最佳答案

您可以使用 HttpServletRequest.getScheme() 来检索“http”或“https”。

将它与 HttpServletRequest.getServerName() 一起使用应该足以重建您需要的 URL 部分。

如果您使用标准端口(http 为 80,https 为 443),则无需在 URL 中明确放置端口。

编辑:如果您的 servlet 容器位于终止 SSL 的反向代理或负载平衡器之后,则有点棘手,因为请求会作为纯 http 转发到 servlet 容器。您有几个选择:

  1. 使用 HttpServletRequest.getHeader("x-forwarded-proto") 代替;这仅在您的负载均衡器正确设置 header 时才有效(Apache 应该 afaik)。

  2. 配置RemoteIpValve在 JBoss/Tomcat 中,这将使 getScheme() 按预期工作。同样,这仅在负载平衡器设置正确的 header 时才有效。

  3. 如果上述方法不起作用,您可以在 Tomcat/JBoss 中配置两个不同的连接器,一个用于 http,一个用于 https,如 this article 中所述。 .

关于java - 如何从 http 或 https 请求中获取带有端口的主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19598690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com