【发布时间】:2014-03-31 11:53:50
【问题描述】:
我正在尝试开发通用 SOAP 客户端 Web 服务。我被困在 HTTP 基本身份验证 部分,我有一个需要这种类型身份验证的服务,并且我使用 SOAP UI API。
我的问题是如何使用 SOAP UI API 在基本类型的 HTTP 标头中注入用户名和密码。
我尝试使用此代码,但出现此错误:soap:mustUnderstand = 1
Web Service的认证主类:
public class BasicAuthAuthorizationInterceptor extends SoapHeaderInterceptor {
@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message message) throws Fault {
Map<String, List<String>> requestHeaders = (Map<String,
List<String>>) message
.get(Message.PROTOCOL_HEADERS);
List<String> authHeaderList = requestHeaders.get("Authorization");
if (authHeaderList != null && authHeaderList.size() > 0) {
if ((authHeaderList.get(0)).equals("Basic c2FicmluZTpzYWJyaW5lcGFzcw==")){
System.out.println("The user is known +++++++");
} else {
sendErrorResponse(message, HttpURLConnection.HTTP_FORBIDDEN);
System.out.println("The user is unknown -------");
}
} else {
sendErrorResponse(message, HttpURLConnection.HTTP_UNAUTHORIZED);
// System.out.println("No user ************");
return;
}
}
Web 服务客户端用于验证的方法:
public List<SoapOutput> execute(String user, String pass) throws IOException {
if ((user!=null && pass!=null) && (!user.equals("") && !pass.equals("")))
{
// Add WSSecurity parameters
wsdlRequest.setWssPasswordType("PasswordText");
wsdlRequest.setUsername(user);
wsdlRequest.setPassword(pass);
wsdlRequest.setWssTimeToLive("10000");
}
Map<String, List<String>> requestHeaders = wsdlRequest.getRequestHeaders();
requestHeaders.put("username", Collections.singletonList(user));
requestHeaders.put("Password", Collections.singletonList(pass));
System.out.println("requestHeaders is: " + requestHeaders);
....
【问题讨论】:
标签: soapui soap-client