我定义了一个骆驼CxfEndpoint服务。消息的接收工作正常,但是我正在生成的响应/确认消息有问题。消息中的WS-Security部件/操作被保留下来,因此在响应中,我有自己的WS-Security部件(签名时间戳记)以及来自调用者/原始消息的WS-Security部件。 原始呼叫者不接受消息确认,并且我怀疑这是问题所在(我有自己的BinarySecuritySessionToken签名和我们自己的签名)。
骆驼路线对于尝试解决该问题非常简单:
from("myEndpoint")
.transacted()
.process(new PreProcessor())
.to("mock:end")
我在路线中将骆驼CxfEndpoint定义为:
CxfEndpoint cxfEndpoint = new CxfEndpoint();
cxfEndpoint.setAddress("http://0.0.0.0:8888/services/Service");
cxfEndpoint.setWsdlURL("Service.wsdl");
cxfEndpoint.setCamelContext(camelContext);
....
问题示例时间戳:
<wsu:Timestamp wsu:Id="TS-6757512FE17DCDC903153191998160526">
<wsu:Created>2018-07-18T13:19:41.605Z</wsu:Created>
<wsu:Expires>2018-07-18T13:24:41.605Z</wsu:Expires>
</wsu:Timestamp>
<u:Timestamp xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" u:Id="uuid-b2a1c0b2-8263-4afc-bc99-f8a46da80ce7-693">
<u:Created>2018-07-18T13:19:42.905Z</u:Created>
<u:Expires>2018-07-18T13:24:42.905Z</u:Expires>
</u:Timestamp>
响应消息的一般结构似乎很好,但是我需要从消息中剥离WS-Security Action Parts。 有没有办法剥离这些部分,还是我需要构造一个全新的消息? 谢谢。如果需要其他信息,请告诉我。
答案 0 :(得分:0)
因此,我通过添加另一个拦截器来删除安全头来解决此问题。 我想知道这是否可以接受,或者是否有更好的解决方案。
public class RemoveSecurityHeadersOutInterceptor extends AbstractSoapInterceptor
{
public RemoveSecurityHeadersOutInterceptor(String phase) {
super(Phase.PRE_PROTOCOL);
}
public void handleMessage(SoapMessage message) throws Fault
{
List<Header> headers = message.getHeaders();
headers.removeIf(h -> h.getName().getLocalPart().equals("Security"));
}
}