5

Tôi làm cách nào để truy cập dịch vụ web thông qua xác thực http cơ bản? Tôi đang sử dụng netbeans được xây dựng trong các tính năng máy khách webservice. Nhưng khi tôi cố gắng truy cập vào dịch vụ web, tôi nhận được một ngoại lệ với thông báo lỗi không xác thực 401.Netbeans Basic Http Auth Jax-WS

Tôi làm cách nào để chuyển đúng tên người dùng và mật khẩu?

Cảm ơn bạn!

Trả lời

4

Bạn có thể sử dụng lớp BindingProvider hoặc WSBindingProvider để truy cập dịch vụ web thông qua xác thực http cơ bản. Mã như sau.

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

Điều này sẽ hoạt động nếu WSDL không được bảo vệ bởi Xác thực http cơ bản – snowflake

+0

tại sao nó không hoạt động đối với tôi? Tôi có chính xác rằng 'AImpl aImplPort = new AImplService(). GetAImplPort(); BindingProvider prov = (BindingProvider) aImplPort; prov.getRequestContext() .đặt (BindingProvider.USERNAME_PROPERTY, "fred"); prov.getRequestContext(). Put (BindingProvider.PASSWORD_PROPERTY, "fred"); Chuỗi b = aImplPort.b(); System.out.println (b); 'không gửi tiêu đề http được ủy quyền dự kiến ​​ –

3

Bạn cũng có thể cung cấp Authenticator của riêng mình. Bằng cách đó, nó sẽ hoạt động ngay cả khi bản thân WDSL được bảo vệ bằng xác thực HTTP cơ bản.

@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()); 

} 
+0

Không biết java chứa tính năng này. Rất hữu ích. Cảm ơn! – gruenewa

+0

lý do tại sao nó hoạt động cho tôi và 'reqContext.put (BindingProvider.USERNAME_PROPERTY," tên người dùng "); 'cách tiếp cận không phải là nó liên quan đến phiên bản java của tôi? –

Các vấn đề liên quan