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.