java - 将 SecurityContextToken 设置为 SOAP header

标签 java web-services jax-ws cxf soap-client

我使用 wsimport 构建我的 java 类。在第一个肥皂请求中,我得到了一个 SecurityToken。在其他请求中,我必须将此 token 放入 header 中。我怎样才能做到这一点?

我在网上找不到任何东西。

    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss wssecurity-secext-1.0.xsd" xmlns:wsc="http://schemas.xmlsoap.org/ws/2005/02/sc">
            <wsc:SecurityContextToken>
                    <wsc:Identifier>__TOKEN__</wsc:Identifier>
            </wsc:SecurityContextToken>
    </wsse:Security>
<小时/>

如果我通过示例设置标题。我得到以下异常。有什么想法吗?

SCHWERWIEGEND: SAAJ0120: Can't add a header when one is already present
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Can't add a header when one is    already present.
at com.sun.xml.internal.messaging.saaj.soap.impl.EnvelopeImpl.addHeader(EnvelopeImpl.java:114)
at com.sun.xml.internal.messaging.saaj.soap.impl.EnvelopeImpl.addHeader(EnvelopeImpl.java:94)
at client.header.WSSUsernameTokenSecurityHandler.handleMessage(WSSUsernameTokenSecurityHandler.java:47)
at client.header.WSSUsernameTokenSecurityHandler.handleMessage(WSSUsernameTokenSecurityHandler.java:15)
at org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeHandleMessage(HandlerChainInvoker.java:347)
at org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeHandlerChain(HandlerChainInvoker.java:254)
at org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeProtocolHandlers(HandlerChainInvoker.java:132)
at org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessageInternal(SOAPHandlerInterceptor.java:169)
at org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.access$000(SOAPHandlerInterceptor.java:71)
at org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor$1.handleMessage(SOAPHandlerInterceptor.java:81)
at org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor$1.handleMessage(SOAPHandlerInterceptor.java:78)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
at $Proxy36.getWSR(Unknown Source)
at client.WSClient.main(WSClient.java:160)

最佳答案

这取决于您在客户端使用的框架。可以找到一个如何做到这一点的示例 here .

关于java - 将 SecurityContextToken 设置为 SOAP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938278/

相关文章:

javascript - getParameter 使用 Fetch API 返回 null

java - 查找 SWT 浏览器的浏览器类型/版本

java - 写入文件并循环(循环未正确执行)

c# - 在android和c#中读取/发送数据蓝牙通信: c# <-> Android

java - 从 Java 中的 SOAPMessage 获取原始 XML

java - Struts 2 文本字段即使没有 value 属性也会显示值

java - 从 eclipse java ee 导出 java web 服务

asp.net - 如何使用 ASP.NET 调用 Web 服务(.wsdl)

java - 非 Java EE 5 servlet 和 Java EE 5 servlet 容器之间有什么区别?

java - 需要添加 SOAP 安全 token