giovedì 10 ottobre 2013

Web Service Java con autenticazione BASIC

Utilizzando JAX-WS, per effettuare una chiamata ad un servizio web protetto con autenticazione BASIC occorre impostare il codice in questo modo:


Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(
        username,
       password.toCharArray());
    }
   });
   // WsTestService s=new WsTestService(urlWsdl);
        Service1 s=new Service1();
        
        Service1Soap ws=s.getService1Soap();
        BindingProvider prov=(BindingProvider)ws;
        prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
        prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);


Da notare che occorre anteporre l'authenticator perchè il client costruito con JAX-WS effettua una connessione tramite oggetto url prima di invocare le operazioni, quindi bisogna fornire prima i dati di autenticazione e poi dopo in fase di chiamata inserendole nel request context.

Mi è capitato di avere problemi con questo sistema su una installazione avvenuta in ambiente Windows Server 2008.
Ricevevo infatti errore di tipo 401 (Autenticazione non valida) e mettendo un TCP Monitor ho visto che nella richiesta effettuata la modalità di autorizzazione era NTLM invece di BASIC.
Quindi ho aggiunto prima dell'authenticator la seguente riga di codice:


System.setProperty("http.auth.preference", "basic");



Nessun commento:

Posta un commento