使用cxf客户端发送BASIC身份验证凭据

时间:2016-01-27 10:08:54

标签: java eclipse web-services cxf

我正在使用cxf webservice客户端发送身份验证凭据,并说:

  

javax.xml.ws.WebServiceException:无法发送消息。

     

引起:org.apache.cxf.transport.http.HTTPException:HTTP响应   与401沟通时'401:未经授权'   http://localhost:8080/AccountFacadeService/AccountService

我的客户是:

QName SERVICE_NAME = new QName("http://webservice.account.com/", "AccountFacadeService");
URL WSDL_LOCATION = http://localhost:8080/AccountFacadeService/AccountService?wsdl;

AccountFacadeService stub = new AccountFacadeService(WSDL_LOCATION, SERVICE_NAME);
AccountService port = stub.getAccountServicePort(); 

((BindingProvider) port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "user");
((BindingProvider) port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pass");

我缺少哪些标题?

1 个答案:

答案 0 :(得分:3)

好的,经过几个小时的挖掘,我终于找到了问题的答案。

  1. 确保正确配置glassfish服务器控制台安全领域中的role,并在glassfish-ejb-jar.xml
  2. 中保持相同
  3. 身份验证凭据以我在帖子中传递的方式传递。有时,当客户端无法为您创建标头时,您可以尝试使用密码验证器。
  4. final String username = "user";
    final String password = "pass";
    Authenticator.setDefault(new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(
                        username,
                        password.toCharArray());
                }
    });