Java 使用cxf客户端发送基本身份验证凭据

Java 使用cxf客户端发送基本身份验证凭据,java,eclipse,web-services,cxf,Java,Eclipse,Web Services,Cxf,我正在使用cxf webservice客户端发送身份验证凭据,它显示: javax.xml.ws.WebServiceException:无法发送消息 原因:org.apache.cxf.transport.http.HTTPException:http响应 “401:未经授权”在与 我的客户是: QName SERVICE_NAME = new QName("http://webservice.account.com/", "AccountFacadeService"); URL WSDL_

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

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

原因:org.apache.cxf.transport.http.HTTPException:http响应 “401:未经授权”在与

我的客户是:

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");

还有更多我遗漏的标题吗?

好吧,经过几个小时的深入研究,我终于找到了问题的答案

  • 确保glassfish服务器控制台的安全域中的
    角色
    配置正确,并且在
    glassfish ejb jar.xml中维护该角色
  • 身份验证凭据以我在帖子中传递的方式传递。有时,当客户端无法为您创建标头时,您可以尝试使用密码验证器

  • final String username = "user";
    final String password = "pass";
    Authenticator.setDefault(new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(
                        username,
                        password.toCharArray());
                }
    });