Soap WSDL绑定URL在SSL终止后将协议更改为HTTP

Soap WSDL绑定URL在SSL终止后将协议更改为HTTP,soap,wsdl,cxf,jax-ws,embedded-jetty,Soap,Wsdl,Cxf,Jax Ws,Embedded Jetty,我们有一个简单的jax-ws-SOAP服务器,由apachecxf3.2.6以独立(自托管)模式支持,它使用嵌入式Jetty。服务器首先使用CXF的wsdl2java生成wsdl。WSDL是类路径上的一个文件,该物理WSDL文件具有https://....位于soapbind:address元素的位置属性中 启动时,服务器发布到http://0.0.0.0:8080。服务器还位于路由https://external-name->SSL终止->http://internal-name:8080,因

我们有一个简单的jax-ws-SOAP服务器,由apachecxf3.2.6以独立(自托管)模式支持,它使用嵌入式Jetty。服务器首先使用CXF的wsdl2java生成wsdl。WSDL是类路径上的一个文件,该物理WSDL文件具有
https://....
位于
soapbind:address
元素的
位置
属性中

启动时,服务器发布到
http://0.0.0.0:8080
。服务器还位于路由<代码>https://external-name->SSL终止->
http://internal-name:8080
,因此可以在
https://external-name

问题在于,当通过
从部署的服务器请求WSDL时https://external-name?wsdl
,CXF将结果文件中
soapbind:address
元素的
location
属性更改为
http://external-name
(将协议从HTTPS更改为HTTP,并保留所有其他内容),这会导致生成客户端代理、Soap UI等出现问题

最糟糕的是,我们的服务不能被我们的合作伙伴的SOA所使用,后者强制使用WSDL中的已发布位置


除了移除SSL终端和让CXF自己处理SSL之外,我们如何解决这个问题?(这很可怕,因为Java密钥库维护噩梦和必须在服务器实例中存储公司范围的证书+私钥)。

您可以在配置中将所需地址设置为
publishedEndpointUrl
。请参阅:

是否已设置/配置
ForwardedRequestCustomizer
SecureRequestCustomizer
以适应此场景?您是否在服务器上设置了
HttpConfiguration
,以指示哪个端口是安全的?@JoakimErdfelt在自托管模式下,我(几乎)对嵌入式Jetty没有影响,我只能自定义此处公开的内容:。我没有组装服务器或使用spring,我只是使用simple
Endpoint.publish
并让CXF使用嵌入式Jetty。根据xsd,您的JettyHTTPServerEngineConfigType.connector条目可以通过特定于连接器的HttpConfiguration条目添加所需的定制程序。我认为这需要比我对Jetty和CXF的深层内部结构更深入的了解。由于其简单性,我们选择了自托管,但似乎我们无法避免构建一个全面的spring应用程序。但是,如何将该配置应用于我在代码
javax.xml.ws.endpoint.publish(地址,实现者)
?找到它:
org.apache.cxf.jaxws.EndpointImpl.setPublishedPointUrl
。它可以工作,只需在调用
publish
之前设置,否则无效。