bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Autenticarsi su un web service SOAP di Liferay via codice

Chi lavora da un pò con Liferay sa che il portale è in grado di esporre web service di tipo SOAP e di tipo REST per tutta la parte core ed anche per la parte di plugin custom.

Prima del rilascio della versione 6.2 di Liferay, i web service venivano erogati in 2 modalità: secure e non secure. L'unica differenza sta nel fatto che, nel primo caso, viene richiesta un'autenticazione HTTP basic da effettuare con gli stessi dati con cui normalmente si fa login al portale.

Però, nel caso in cui ci si trovi a dover invocare via codice i web service SOAP, come fare ad autenticarsi correttamente?

Se avete mai avuto questo problema ed avete cercato un pò su Google sicuramente avrete trovato queta risposta, ossia utilizzare il seguente endpoint:http://test:test@localhost:8080/api/axis/Portal_UserService.

In pratica non si fa nulla di particolare perchè, in base alle specifiche HTTP si passano username e password direttamente nella URL; questa soluzione è perfettamente corretta e lecita ma nessuno dice mai che funziona solamente se il portale è configurato per autenticarsi via screenName oppure via userId. Peccato però che l'autenticazione di default di Liferay sia mediante email che, contenendo il carattere @, genera qualche problemino e non c'è soluzione nemmeno escapando i caratteri.

Come fare allora?

Innanzitutto occorre generare con Axis tutte le classi necessarie; supponiamo di utilizzare i servizi di gestione degli utenti, ossia Portal_UserService.

Dopodichè occorre utilizzare il seguente codice per recuperare l'oggetto su cui invocare i metodi remoti:

UserServiceSoapServiceLocator userLocator = new UserServiceSoapServiceLocator();
Portal_UserServiceSoapBindingStub service =
    (Portal_UserServiceSoapBindingStub) userLocator.getPortal_UserService();
service.setUsername(username);
service.setPassword(password);

Ricordate sempre che Axis cabla all'interno della classeUserServiceSoapServiceLocatorla URL completa del WSDL che potrebbe essere quella non secure; quindi se qualcosa non funzionasse, potete sempre invocare il metodogetPortal_UserService()nella versione ad un parametro passandogli la URL secure.

Precedente
Commenti
Aggiungi Commento
Jader Jed Francia
Per il map degli end point finali, consiglio di utilizzare la tecnica spiegata sempre da Marco in questo post, relativa all'esternalizzazione in file di properties nella configurazione del portale:

http://blog.d-vel.com/web/blog/home/-/blogs/estendere-le-property-di-un-plugin-custom

Noi utilizziamo molto spesso questo meccanismo con somma soddisfazione anche dei sistemisti dei nostri clienti: avendo la possibilità di modificare esternamente agli oggetti che rilasciamo le configurazioni, diamo loro la possibilità di modificarli a piacimento senza avere impatti legati a eventuali nostri nuovi rilasci!
Inviato il 09/07/15 14.02.