2009-06-09 84 views
15

我正在嘗試開發liferay的portlet。從liferay portlet訪問用戶?

我該如何訪問當前登錄用戶的用戶名和密碼(以及其他數據liferay)?

我也希望能夠在用戶更改密碼時執行一些代碼。

回答

15

您可以通過在PortletRequest對象中調用getRemoteUser()來獲取用戶標識。這由JSR-168定義,因此它是跨門戶兼容的。

一旦擁有該ID,您可以致電getUserById()(Liferay特定服務)獲取其他信息。這是Portlet API規範未涵蓋的內容,因此它會將您鎖定到Liferay。

+3

Liferay的特定服務是UserServiceUtil – frandevel 2011-10-30 21:50:56

14

Liferay的具體的東西,這裏是寫在portlet類來獲取用戶的代碼示例:

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(); 

或者;

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

模擬用戶:

Liferay的具有管理員有一個概念(或使用正確的一組權限的人)可以模擬門戶的一個特定的用戶。通過這些,他們可以看到門戶網站對用戶的看法。

對於執行代碼時用戶更改他們的密碼: 一種方法是創建一個hook plugin並通過擴展UserLocalServiceWrapper類中重寫服務。然後檢查密碼更改並在您的自定義類中執行您的代碼。

希望這會有所幫助。

1

或者你也可以使用JavaScript:

Liferay.ThemeDisplay.getUserId() 

有很多不錯的Liferay的命名空間富人,看看在沒有做到有據可查的API:

另外,請看網頁在本地主機可用rvices:8080/API/jsonws,你可以用javascript調用調用:

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

一個簡單易用的方式來獲得在Liferay的用戶PortalUtil.getUser功能。

User user = PortalUtil.getUser(portletRequest);