gpt4 book ai didi

java - 在 Mule 流中使用安全的 SOAP Web 服务

转载 作者:行者123 更新时间:2023-12-01 09:19:52 27 4
gpt4 key购买 nike

我正在尝试使用 Mule 中的 CXF 来使用需要安全性的 SOAP Web 服务。我已经让它工作了,但我需要将密码放入配置文件中。我找不到如何将密码从配置传递到流/回调类。我的流程如下所示:

<cxf:jaxws-client 
clientClass="za.co.iam.service.identitymanager.intf._1.IdentityManager_Service"
port="IdentityManager"
wsdlLocation="classpath:/wsdl/IdentityManager.wsdl"
operation="CheckUserId" doc:name="CXF">
<cxf:ws-security>
<cxf:ws-config>
<cxf:property key="action" value="UsernameToken Timestamp"/>
<cxf:property key="user" value="${security.username}"/>
<cxf:property key="passwordType" value="PasswordText"/>
<cxf:property key="passwordCallbackClass" value="za.co.iam.IamPasswordCallback"/>
</cxf:ws-config>
</cxf:ws-security>
</cxf:jaxws-client>
<outbound-endpoint address="${iam.webservice}" doc:name="Generic"/>

IamPasswordCallback 类:

public class IamPasswordCallback implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
{
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
pc.setPassword("********");
}
}

这工作正常,但我还需要将密码放入配置文件中。我通常这样做的方法是从 IamPasswordCallback 中创建一个 bean 并在流程中设置值,然后使用该 bean 作为 CXF 设置上的回调处理程序,但我不知道那是什么配置应该看起来像。另一种方法是在 IamPasswordCallback 类中加载属性文件,但我认为不建议这样做。

最佳答案

如果您使用新的 wsconsumer 组件,您可以直接从配置文件提供用户和密码。

<ws:consumer-config name="Web_Service_Consumer" wsdlLocation="test.wsdl" service="testService" port="test" serviceAddress="${url.endpoint}" doc:name="Web Service Consumer" connectorConfig="HTTP_Request_Config">
<ws:security>
<ws:wss-username-token username="${user}" password="${password}" passwordType="TEXT"/>
</ws:security>
</ws:consumer-config>

如果您必须坚持使用 CXF,那么您可以使用 spring bean 定义,如下所示:

在您的全局元素中,

<spring:bean id="WSSCallback" name="WSSCallback" class="test.ClientCallback">
<spring:property name="SoapPassword" value="${password}"/>
</spring:bean>

并在您的回调类中包含以下或类似的代码:

public class ClientCallback implements CallbackHandler {
private String SoapPassword;
public String getSoapPassword() {
return SoapPassword;
}
public void setSoapPassword(String soapPassword) {
SoapPassword = soapPassword;
}
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

// set the password for our message.
pc.setPassword(SoapPassword);
}
}

现在您的 cxf-client 中有以下配置:

   <cxf:jaxws-client enableMuleSoapHeaders="false" doc:name="SOAP" clientClass="client.class" operation="testop" port="testport" wsdlLocation="test.wsdl"> 
<cxf:ws-security>
<cxf:ws-config>
<cxf:property key="action" value="UsernameToken"></cxf:property>
<cxf:property key="user" value="${user.name}"></cxf:property>
<cxf:property key="passwordType" value="PasswordText"></cxf:property>
<cxf:property key="passwordCallbackRef" value-ref="WSSCallback"></cxf:property>
</cxf:ws-config>
</cxf:ws-security>
</cxf:jaxws-client>

关于java - 在 Mule 流中使用安全的 SOAP Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40236406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com