2009-06-09 8 views
15

Sto tentando di sviluppare un portlet per liferay.Accesso all'utente da un portlet liferay?

Come posso ottenere l'accesso al nome utente e alla password (e altri dati che liferay ha) dell'utente attualmente connesso?

Mi piacerebbe anche essere in grado di eseguire del codice quando gli utenti cambiano la password.

risposta

15

È possibile ottenere l'ID utente chiamando lo getRemoteUser() nell'oggetto PortletRequest. Questo è definito da JSR-168 e pertanto è compatibile cross-portale.

Una volta ottenuto l'ID, è possibile recuperare le informazioni aggiuntive chiamando lo getUserById() (un servizio specifico Liferay). Questo non è coperto dalle specifiche dell'API Portlet, quindi si blocca su Liferay.

+3

Il servizio specifico Liferay è UserServiceUtil – frandevel

+1

Tecnicamente, si può rimanere più portale indipendente utilizzando 'portletRequest.getAttribute (PortletRequest.USER_INFO)'.Ciò restituisce una mappa degli attributi utente che può essere definita da ciascuna implementazione del portale. Vedi 'portlet-custom.xml' e' com.liferay.portlet.UserAttributes' per gli attributi utente di Liferay. Per la maggior parte, i nomi degli attributi utente sono quelli raccomandati dalle specifiche del portlet. –

14

Liferay roba specifico, ecco un esempio di codice da scrivere nella vostra classe Portlet per recuperare l'utente:

ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(WebKeys.THEME_DISPLAY); 

User user = themeDisplay.getRealUser(); // it gives you the actual Logged in User 
//you can also use 
// User user = themeDisplay.getUser(); // this would fetch the User you are impersonating 

long userId = user.getUserId(); 
String userName = user.getEmailAddress(); 

alternativa;

long userId = themeDisplay.getRealUserId(); // themeDisplay.getUserId(); 
User user = UserLocalServiceUtil.getUser(userId); 

rappresentare l'utente:

Liferay ha un concetto che gli amministratori (o persone con il giusto set di autorizzazioni) può impersonare un particolare utente del portale. Attraverso questo possono vedere come il portale guarda a quell'utente.

Per eseguire il codice quando l'utente cambia la propria password: Un approccio potrebbe essere quello di creare un hook plugin e ridefinendo i servizi estendendo la classe UserLocalServiceWrapper. Quindi verifica la modifica della password ed esegui il codice all'interno della tua classe personalizzata.

Spero che questo aiuti.

1

Oppure si può semplicemente utilizzare javascript:

Liferay.ThemeDisplay.getUserId() 

Ci sono molti bello have nello spazio dei nomi Liferay, un'occhiata alle API non è così ben documentata:

Inoltre, dare un'occhiata al web se rvizi disponibili sotto localhost: 8080/API/jsonws che è possibile richiamare con una chiamata javascript:

Liferay.Service(
    '/user/get-user-by-id', 
    { 
    userId: 10199 
    }, 
    function(obj) { 
    console.log(obj); 
    } 
); 
0

un semplice e un modo semplice per ottenere l'utente in Liferay è PortalUtil.getUser funzione.

User user = PortalUtil.getUser(portletRequest);