【问题标题】:Sharing data between CXF interceptor and webservice在 CXF 拦截器和 webservice 之间共享数据
【发布时间】:2014-11-28 20:33:11
【问题描述】:

我在 Apache CXF WSS4JInInterceptor 中使用安全拦截器。

有没有办法将数据从拦截器传递到 web 服务?

我一直在 WebServiceContext 中搜索,但找不到。

【问题讨论】:

  • 您是否希望在您自己的 WSS4JInInterceptor 扩展和您的服务实现之间传递任意数据?
  • 我的扩展是一个自定义加密实例,它调用存储过程从数据库等获取证书。来自 SP 的一些数据必须在我的 web 服务实现中可用

标签: web-services cxf jax-ws ws-security wss4j


【解决方案1】:

您可以使用 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
  • 您的班级是否在 CXF 中实现 Crypto?只要创建了 CXF 消息,您就应该能够使用 PhaseInterceptorChain.getCurrentMessage().getExchange().put() 将内容添加到交换中。否则,ThreadLocal 可能是另一种选择。
  • 哦,你是对的,我将尝试使用 PhaseInterceptorChain。谢谢;)
  • 我能够在实现 javax.security.auth.callback.Callback 并且是 wss4jInterceptor (org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor) 的一部分的类中访问此上下文并在它和实现 org.aopalliance.intercept.MethodInterceptor.MethodInterceptor 的 spring 拦截器类之间共享数据。效果很好!
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多