我在Apache CXF WSS4JInInterceptor
上使用安全拦截器。在CXF拦截器和webservice之间共享数据
是否有任何方法将数据从拦截器传递到webservice?
我一直在寻找那WebServiceContext
,但我找不到它。
我在Apache CXF WSS4JInInterceptor
上使用安全拦截器。在CXF拦截器和webservice之间共享数据
是否有任何方法将数据从拦截器传递到webservice?
我一直在寻找那WebServiceContext
,但我找不到它。
您可以使用CXF Exchange Map来存储任意的键/值对。 Exchange可用于输入和输出消息。在拦截器中,将对象添加到Exchange中
Object value = ...;
message.getExchange().put("key", value);
在你的服务,你可以使用PhaseInterceptorChain.getCurrentMessage()访问交流和检索对象,例如
Object value = PhaseInterceptorChain.getCurrentMessage().getExchange().get("key");
此响应正确,但我写了错误的问题。对不起,我误解了这些概念。我需要从org.apache.ws.security.components.crypto.Crypto传递数据到webservice实现。我会再问一次。谢谢@Patrick – rvillablanca 2014-10-06 22:20:16
你的类是否在CXF中实现了Crypto?只要CXF消息已被创建,您应该可以使用PhaseInterceptorChain.getCurrentMessage()。getExchange()。put()将内容添加到交换中。否则,ThreadLocal可能是另一种选择。 – Patrick 2014-10-06 22:50:28
哦,你说得对,我会用PhaseInterceptorChain试试。谢谢;) – rvillablanca 2014-10-06 23:16:40
您是否希望在您自己的WSS4JInInterceptor扩展和您的服务实现之间传递任意数据? – Patrick 2014-10-06 16:36:56
我的扩展是一个自定义加密实例,它调用存储过程以从数据库等获取证书。SP中的一些数据必须在我的web服务实现中可用 – rvillablanca 2014-10-06 21:18:37