Netbeans基本Http身份验证Jax-WS

5

如何通过基本的http身份验证访问webservice?我正在使用netbeans内置的webservice客户端功能。但是当我尝试访问webservice时,会出现一个带有401身份验证失败错误消息的异常。

我该如何传递正确的用户名和密码?

谢谢!

2个回答

4
您可以使用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");

2
如果WSDL没有通过基本的Http身份验证进行保护,那么这将起作用。 - snowflake
为什么对我不起作用?我完全有这个`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头。 - Jaime Hablutzel

3

您也可以提供自己的认证器。这样,即使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());

}

不知道Java包含这个功能。非常有帮助。谢谢! - gruenewa
为什么这对我有效而 reqContext.put(BindingProvider.USERNAME_PROPERTY, "username"); 方法不行,这与我的Java版本有关吗? - Jaime Hablutzel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接