【发布时间】:2012-12-05 13:36:52
【问题描述】:
我希望能够在 cxf 中动态更改/设置每个发送肥皂消息的 ws-security 信息。怎样才能最好地做到这一点。
详细信息:我想在运行时更改密钥库名称、密钥库别名、密码、主机名等设置,最好在每次发送消息时更改。 目前我正在使用:带有 WSS4JOutInterceptor 和 WSS4JInInterceptor 拦截器的 jaxws 客户端进行签名。我正在使用带有 tls 客户端参数的 http 管道进行 SSL/TLS 通信。 jaxws 客户端和 http 管道都在 spring 中配置,并且在 Spring 配置中设置了它们的配置,如密钥库名称、别名和密码。
我看到了选项: 1)我在运行时通过全局属性更改这些设置。 2) 我会根据发送消息更改这些设置(最好)。
2) 是可取的,但我认为是最困难的。 我该怎么做?
我在想: a) jaxws 客户端:制作我自己的进出拦截器来拦截消息,并根据该消息所需的安全设置使用正确的(缓存的)WSS4JOutInterceptor 拦截器。如果缓存中不存在 WSS4JOutInterceptor 拦截器,则会创建它(我可能缓存了最多 5 个 WSS4JOutInterceptor 实例)。 但是,当与@Webservice 代理交谈以创建和发送soap 请求/消息时,如何确定我的拦截器中需要哪些设置,因为这在应用程序的其他部分中是已知的...... 也许我可以通过 JaxWsClientProxy 将某种 securityInfo 对象添加到肥皂消息中,但是如何?... 或者,当仍然知道此安全信息时,也许我可以在发送/创建肥皂消息时设置拦截器。这将是一个包含所需设置的轻量级拦截器,链接到缓存的拦截器,根据设置选择...
b) http 管道:使用 ConduitSelector(从未使用过,但会发现),这样我就可以选择正确的 http 管道,但我遇到了与 (a) 中相同的问题:“如何确定哪个我应该使用的设置”,因为它们在创建/发送肥皂消息时已知,并且拦截器稍后设置...... 可能我必须为每个发送消息设置一个管道选择器..
最后上面变成了一个大故事;),但我希望你能给出一些建议吗?
【问题讨论】:
-
这是在 Apache CXF 邮件列表上交叉发布的,并在那里得到了更多讨论:mail-archive.com/users@cxf.apache.org/msg29770.html