2013-10-09 33 views
2

我想從過濾器類訪問liferay遠程用戶ID。如何從過濾器類獲取liferay遠程用戶

@Override 
public void doFilter(ServletRequest request, 
        ServletResponse response, 
        FilterChain chain) throws IOException, ServletException { 
    try { 
     HttpServletRequest httpServletRequest = (HttpServletRequest) request; 
     User user = (User)request.getAttribute(WebKeys.USER); 

     System.out.println("User ID :" + user.getUserId()); 
     System.out.println("User ID :" + httpServletRequest.getRemoteUser()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

輸出

User :null 
java.lang.NullPointerException 

請告訴我,我怎樣才能得到遠程用戶ID的形式HttpServletRequest

+0

您有縮進代碼隊友的奇怪方法。不確定您是否擁有編輯權限,但是,即使在發佈之後,也可以檢查您的帖子格式和語言。像這裏一樣,用於格式化的混合選項卡和空格導致代碼看起來很難閱讀。我爲你編輯了一下。 – Nenotlep

回答

3

您可以使用com.liferay.portal.util.PortalUtil.getUser(HttpServletRequest request)來獲得Liferay用戶。

public void doFilter(ServletRequest request, 
      ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
    try { 
     HttpServletRequest httpServletRequest = (HttpServletRequest) request; 
     User user = PortalUtil.getUser(request);  
     System.out.println("User ID :" + user.getUserId()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

你有什麼提示,爲什麼'PortalUtil.getUser()'返回null?用戶根據Liferay登錄 -/c/portal/login將用戶記錄爲已登錄,但是在doFilter中,用戶爲空。 – Nenotlep

+0

對不起,我不記得有類似的問題,因爲我不再和Liferay一起工作,所以我很難看一下這個問題。應該值得調試你的應用程序,並檢查你的'request'和'httpServletRequest'對象。它也可能是會話超時?也許你應該創建一個新的問題,因爲Liferay版本可能是一個因素。 – yannicuLar