【发布时间】:2010-12-28 01:36:57
【问题描述】:
如何通过基本的 http 身份验证访问 Web 服务?我正在使用内置于 web 服务客户端功能的 netbeans。但是当我尝试访问 web 服务时,我收到了一个 401 auth failed 错误消息的异常。
如何传递正确的用户名和密码?
谢谢!
【问题讨论】:
标签: web-services netbeans jax-ws webservice-client http-authentication
如何通过基本的 http 身份验证访问 Web 服务?我正在使用内置于 web 服务客户端功能的 netbeans。但是当我尝试访问 web 服务时,我收到了一个 401 auth failed 错误消息的异常。
如何传递正确的用户名和密码?
谢谢!
【问题讨论】:
标签: web-services netbeans jax-ws webservice-client http-authentication
您可以使用 BindingProvider 或 WSBindingProvider 类通过基本的 http 身份验证访问 Web 服务。 代码如下。
XxxService service = new XxxService();
Xxx port = service.getXxxPort();
Map<String, Object> reqContext = ((BindingProvider)port).getRequestContext();
reqContext.put(BindingProvider.USERNAME_PROPERTY, "username");
reqContext.put(BindingProvider.PASSWORD_PROPERTY, "password");
【讨论】:
AImpl aImplPort = new AImplService().getAImplPort(); BindingProvider prov = (BindingProvider) aImplPort; prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "fred"); prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "fred"); String b = aImplPort.b(); System.out.println(b); 它没有发送预期的授权 http 标头
您也可以提供自己的身份验证器。这样,即使 WDSL 本身受到基本 HTTP 身份验证的保护,它也能正常工作。
@WebServiceRef(wsdlLocation = "https://laka/sito?wsdl")
static XxxService service;
public static void main(String[] args) {
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "password".toCharArray());
}
});
service = new XxxService();
Xxx port = service.getXxxPort();
// invoke webservice and print response
XxxResponse resp = port.foo();
System.out.println(resp.toString());
}
【讨论】:
reqContext.put(BindingProvider.USERNAME_PROPERTY, "username"); 方法与我的 java 版本无关?