使用 Citrus 在 soap 请求中输入 WSS 密码
WSS-Password Type in soap request using Citrus
我需要发送 soap 请求以使用 Citrus 框架自动执行我的测试。但是当我发送请求时,它 returns "Invalid username or password"
Soap response
我尝试使用 SoapUI 发送相同的内容,它工作正常,因为它通过属性将密码类型作为文本发送。
Password type in soapUI
我遇到的问题是在 citrus.I 中设置 "WSS-Password Type" 已经使用柑橘文档设置了用户名和密码,但我没有找到如何将密码类型设置为文本。
柑橘-context.xml
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>
<citrus-ws:client id="todoListClient"
request-url="soapURL"
message-sender="basicAuthClient"/>
<bean id="basicAuthClient" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
<property name="authScope">
<bean class="org.apache.http.auth.AuthScope">
<constructor-arg value="host"/>
<constructor-arg value="port"/>
<constructor-arg value=""/>
<constructor-arg value="basic"/>
</bean>
</property>
<property name="credentials">
<bean class="org.apache.http.auth.UsernamePasswordCredentials">
<constructor-arg value="username"/>
<constructor-arg value="password"/>
</bean>
</property>
</bean>
帮我实现这个目标。谢谢
您的代码使用基本身份验证而不是 WSSecurity。您必须为 WSSecurity 配置客户端拦截器,如下所示:
<citrus-ws:client id="todoListClient"
request-url="http://localhost:8080/services/ws/todolist"
interceptor="wss4jSecurityInterceptor"/>
<bean id="wss4jSecurityInterceptor"
class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
<property name="securementActions" value="Timestamp UsernameToken"/>
<property name="securementUsername" value="admin"/>
<property name="securementPassword" value="secret"/>
</bean>
Wss4jSecurityInterceptor class 有一个名为 "securementPasswordType" 的 属性 可以设置。
另请参阅 Citrus 示例项目 https://github.com/christophd/citrus-samples/tree/master/sample-soap-wssecurity
我需要发送 soap 请求以使用 Citrus 框架自动执行我的测试。但是当我发送请求时,它 returns "Invalid username or password"
Soap response
我尝试使用 SoapUI 发送相同的内容,它工作正常,因为它通过属性将密码类型作为文本发送。
Password type in soapUI
我遇到的问题是在 citrus.I 中设置 "WSS-Password Type" 已经使用柑橘文档设置了用户名和密码,但我没有找到如何将密码类型设置为文本。
柑橘-context.xml
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>
<citrus-ws:client id="todoListClient"
request-url="soapURL"
message-sender="basicAuthClient"/>
<bean id="basicAuthClient" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
<property name="authScope">
<bean class="org.apache.http.auth.AuthScope">
<constructor-arg value="host"/>
<constructor-arg value="port"/>
<constructor-arg value=""/>
<constructor-arg value="basic"/>
</bean>
</property>
<property name="credentials">
<bean class="org.apache.http.auth.UsernamePasswordCredentials">
<constructor-arg value="username"/>
<constructor-arg value="password"/>
</bean>
</property>
</bean>
帮我实现这个目标。谢谢
您的代码使用基本身份验证而不是 WSSecurity。您必须为 WSSecurity 配置客户端拦截器,如下所示:
<citrus-ws:client id="todoListClient"
request-url="http://localhost:8080/services/ws/todolist"
interceptor="wss4jSecurityInterceptor"/>
<bean id="wss4jSecurityInterceptor"
class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
<property name="securementActions" value="Timestamp UsernameToken"/>
<property name="securementUsername" value="admin"/>
<property name="securementPassword" value="secret"/>
</bean>
Wss4jSecurityInterceptor class 有一个名为 "securementPasswordType" 的 属性 可以设置。
另请参阅 Citrus 示例项目 https://github.com/christophd/citrus-samples/tree/master/sample-soap-wssecurity