我最近开发了一个SOAP Web服务。 我开始没有身份验证就实现了它。它工作正常:服务,使用SOAP UI的调用和gatling测试。
我添加了摘要式身份验证,现在我无法进行我的测试工作(使用SOAP UI的测试仍然成功)。
根据gatling文档(here),我应该在我的http请求上调用.digestAuth(login, pass)
:
val scn = scenario("scenario")
.feed(feeder)
.feed(feeder2)
.forever{
exec(
http("myRequest")
.post(target)
.digestAuth("login","pass")
.body(ELFileBody("Request.wsdl"))
.headers(headers_2)
)
}
来自服务器的答案始终是500错误,并显示以下消息:
Jul 07,2015 4:27:31 PM com.sun.xml.wss.impl.SecurityRecipient processMessagePolicy SCHWERWIEGEND:WSS0253:消息不符合已配置的策略:消息中未找到安全标头
更新:
我正在使用最新版本的gatling 2.1.6
我无法共享我的网络服务,但这是如何配置的。
弹簧servlet.xml中
<sws:interceptors>
<bean id="wsSecurityInterceptor"
class="org.springframework.ws.soap.security.xwss.XwsSecurityInterceptor">
<property name="policyConfiguration" value="classpath:securityPolicy.xml" />
<property name="callbackHandlers">
<list>
<ref bean="passwordValidationHandler" />
</list>
</property>
</bean>
</sws:interceptors>
<bean id="passwordValidationHandler"
class="org.springframework.ws.soap.security.xwss.callback.SimplePasswordValidationCallbackHandler">
<property name="users">
<props>
<prop key="user">password</prop>
</props>
</property>
</bean>
还有securityPolicy.xml
<?xml version="1.0" encoding="UTF-8"?>
<xwss:SecurityConfiguration xmlns:xwss="http://java.sun.com/xml/ns/xwss/config">
<xwss:RequireUsernameToken passwordDigestRequired="true" nonceRequired="true" />
</xwss:SecurityConfiguration>
更新2: 以下是来自加特林日志的完整请求和回复:
10:06:57.243 [WARN ] i.g.h.a.AsyncHandlerActor - Request 'post_Addresscheck' failed:
status.find.in(200,304,201,202,203,204,205,206,207,208,209), but
actually found 500
10:06:57.244 [TRACE] i.g.h.a.AsyncHandlerActor - http://localhost:8000/ROOT/checkAddresshttp://localhost:8000/ROOT/checkAddress
headers=
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
Content-Length: 1830
Connection: keep-alive
Host: localhost:8000
Accept: */*
realm=Realm{principal='user', password='password', scheme=DIGEST, realmName='', nonce='', algorithm='MD5', response='', qop='auth', nc='00000001', cno
nce='', uri='null', methodName='GET', useAbsoluteURI='true', omitQuery='false'}
=========================
HTTP response:
status=
500 Internal Server Error
headers=
Server: [Apache-Coyote/1.1]
Accept: [text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2]
SOAPAction: [""]
Content-Type: [text/xml;charset=utf-8]
Content-Length: [605]
Date: [Thu, 09 Jul 2015 08:06:57 GMT]
Connection: [close]
我的测试定义中是否遗漏了一些内容?
答案 0 :(得分:1)
我认为这里可能存在一个混淆:Gatling支持HTTP摘要身份验证,而不支持WSS摘要身份验证(其中,信用卡作为SOAP标头在正文中传递,而不是HTTP标头)。