2014-10-03 103 views
1

我在Apache CXF WSS4JInInterceptor上使用安全拦截器。在CXF拦截器和webservice之间共享数据

是否有任何方法将数据从拦截器传递到webservice?

我一直在寻找那WebServiceContext,但我找不到它。

+0

您是否希望在您自己的WSS4JInInterceptor扩展和您的服务实现之间传递任意数据? – Patrick 2014-10-06 16:36:56

+0

我的扩展是一个自定义加密实例,它调用存储过程以从数据库等获取证书。SP中的一些数据必须在我的web服务实现中可用 – rvillablanca 2014-10-06 21:18:37

回答

3

您可以使用CXF Exchange Map来存储任意的键/值对。 Exchange可用于输入和输出消息。在拦截器中,将对象添加到Exchange中

Object value = ...; 
message.getExchange().put("key", value); 

在你的服务,你可以使用PhaseInterceptorChain.getCurrentMessage()访问交流和检索对象,例如

Object value = PhaseInterceptorChain.getCurrentMessage().getExchange().get("key"); 
+0

此响应正确,但我写了错误的问题。对不起,我误解了这些概念。我需要从org.apache.ws.security.components.crypto.Crypto传递数据到webservice实现。我会再问一次。谢谢@Patrick – rvillablanca 2014-10-06 22:20:16

+0

你的类是否在CXF中实现了Crypto?只要CXF消息已被创建,您应该可以使用PhaseInterceptorChain.getCurrentMessage()。getExchange()。put()将内容添加到交换中。否则,ThreadLocal可能是另一种选择。 – Patrick 2014-10-06 22:50:28

+0

哦,你说得对,我会用PhaseInterceptorChain试试。谢谢;) – rvillablanca 2014-10-06 23:16:40