Java 从安全服务检索WSDL文件

Java 从安全服务检索WSDL文件,java,web-services,jax-ws,basic-authentication,Java,Web Services,Jax Ws,Basic Authentication,我有一个用JAX-WS开发的Web服务。我已经用Tomcat中配置的基本身份验证保护了web服务 当我尝试使用Java客户端访问web服务时,首先需要创建端口,然后指定凭据,如下所示: CustomerServiceClient customerServiceClient = new CustomerServiceBottomUpService(); //1 CustomerService customer = customerServiceClient.getCustomerServicePo

我有一个用JAX-WS开发的Web服务。我已经用Tomcat中配置的基本身份验证保护了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
CustomerServiceClient CustomerServiceClient=new CustomerServiceBottomUpService()//1.
CustomerServiceCustomer=customerServiceClient.getCustomerServicePort()//2.
映射上下文=((BindingProvider)customer).getRequestContext()//3.
put(BindingProvider.USERNAME_属性,“kermit”)//4.
put(BindingProvider.PASSWORD_属性,“thefrog”)//5.
我的问题是,在第1行之后,我得到了一个授权错误(HTTP401),因为我显然还没有向服务器提供凭据


我从服务器WSDL创建客户机构件,因此在创建服务时存在身份验证问题,并且不希望我的客户机在本地存储WSDL,因为这对他们来说很烦人。如何解决此问题?

BindingProvider.USERNAME\u属性、BindingProvider.PASSWORD\u属性主要用于服务请求。当您实例化服务时,它获取WSDL,服务器返回401。您可以尝试以下任一解决方案:

  • 在客户端应用程序中使用
    java.net.Authenticator
  • 使用目录提供对WSDL的本地访问
  • 配置
    web.xml
    以允许GET请求无需身份验证

参考资料

谢谢您的回复。不太喜欢Authenticator或catalog之类的东西,并且使用always-GET访问服务。是否可以修改为仅接受POST HTTP请求?