我有一个使用JAX-WS开发的Web服务。我已使用在Tomcat中配置的BASIC身份验证来保护Web服务。
当我尝试使用Java客户端访问Web服务时,我首先需要创建端口,然后指定凭据,如下所示:
CustomerServiceClient customerServiceClient = new CustomerServiceBottomUpService(); //1
CustomerService customer = customerServiceClient.getCustomerServicePort(); //2
Map<String, Object> context = ((BindingProvider) customer).getRequestContext(); //3
context.put(BindingProvider.USERNAME_PROPERTY, "kermit"); //4
context.put(BindingProvider.PASSWORD_PROPERTY, "thefrog"); //5
我遇到的问题是,在第1行之后,我收到了授权错误(HTTP 401),因为我显然还没有为服务器提供凭据。
我正在从服务器WSDL创建客户端工件,因此在创建服务时出现身份验证问题,并且不希望我的客户端在本地存储WSDL,因为它只是让他们讨厌。我怎样才能解决这个问题呢?
答案 0 :(得分:2)
BindingProvider.USERNAME_PROPERTY,BindingProvider.PASSWORD_PROPERTY主要用于服务请求。当您实例化Service时,它会获取WSDL并且服务器返回401.您可以尝试以下任何一种解决方案:
- 在客户端应用程序中使用
java.net.Authenticator
类。- 使用目录提供对WSDL的本地访问。
- 配置
web.xml
以允许GET请求而无需身份验证。