Utilizzando JAX-WS, per effettuare una chiamata ad un servizio web protetto con autenticazione BASIC occorre impostare il codice in questo modo:
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:
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