gpt4 book ai didi

java - jax-ws webservice 的端点始终是 localhost

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:28 25 4
gpt4 key购买 nike

我真的需要你的帮助。我读到 jax-ws web 服务的 wsdl 将为每个请求即时生成。这样,像 soap 端点这样的地址将被调整为请求 url。

在我的例子中,无论是内部还是外部请求,地址总是指向 localhost:8080。

有人知道我该如何处理这个问题吗?

提前致谢


也许我没有很好地描述我的问题。

  1. 我有一个用 jax-ws 创建的 ws
  2. 它部署在 tomcat 服务器 5.5.17
  3. 本地ip访问正常http://192.168.1.20:8070/mywebservice?wsdl
  4. 使用外部 ip 访问不起作用。 ws“引擎”使用本地 ip 而不是外部 ip 重写 urlexternal.domain.de:8070/mywebservice?wsdl

对于external.domain,wsdl中的所有url都被重写为本地ip到 xsdschemaLocation 和 soap:address 位置

莫非代理服务器的问题?通过代理请求使 web 服务认为它是本地访问而不是外部访问。

如何在服务器端防止这种行为?更改 web.xml 或 sun.jax(很遗憾,无法在客户端进行更改)

最佳答案

这是通过外部代理访问网络服务时的典型问题。

要使其正常工作,您必须执行以下操作

1) 在 Tomcat 的 server.xml 中添加另一个 HTTP 连接器。说在端口 8071 上,只需复制 8080 Connector Dfn。并将端口设置为 8071。

2) 在连接器的定义中。您必须将外部 IP 和端口添加为 proxyHost 和 proxyPort。

即你的 server.xml 应该包含一个类似这样的连接器条目

<Connector port="8071" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyHost="external.domain.de" proxyPort="8070" />

并确保在端口 8070 上与 external.domain.de 的连接被转发到 192.168.1.20 和端口 8071,而不是 8070。

我告诉过你设置一个新的连接器,假设你想在内部和外部访问 WS。这样,8070 上的内部端口连接器不使用代理主机并更改内部请求的主机名,但是来自外部源的任何请求通过端口 8071 上的 external.domain.de 将获得 external.domain.de 作为主机名和 8070作为港口。

如果您的 WS 将仅从外部客户端访问,那么您实际上不需要 2 个连接器,只需将 proxyHost 和 proxyPort 指令添加到 8070 连接器即可。但请注意,即使是内部请求,现在也会将主机名视为 external.domain.de。

更多信息@ https://tomcat.apache.org/tomcat-5.5-doc/config/http.html#Proxy_Support

关于java - jax-ws webservice 的端点始终是 localhost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7468635/

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