2011-07-20 57 views
0

我有一個名爲'usermanager'的會話作用域託管bean。我想將用戶信息存儲在usermanager bean的屬性中,並使用下面的靜態方法訪問它。我想提出這些問題,提前致謝,並對可憐的英語感到抱歉。如何用jsf登錄

1-A託管bean被管理,如果我通過jsf注入mechanizm.That是它如果我創建一個實例使用新的UserManager()這不會是一個託管bean。我是嗎?

2 - 以下代碼中的usermanager可以爲null。

3-在java中處理用戶,組權限的最有效方法是什麼?我應該使用Spring,Seam來達到這個目的。

4 - 我應該將此用戶信息存儲在與setParamater(key,Object)的Httpsession中,還是繼續將其存儲在會話Bean中。

public static User getUserOfCurrentSession(){ 
     UserManager userManager = (UserManager) ((HttpServletRequest)FacesContext.getCurrentInstance() 
       .getExternalContext().getRequest()).getSession(true) 
       .getAttribute("userManager"); 

     if(userManager!=null){ 
      return userManager.getUser(); 
     } 
     FacesContext c = FacesContext.getCurrentInstance(); 
     HttpServletRequest r = (HttpServletRequest) c.getExternalContext() 
       .getRequest(); 
     HttpSession s = r.getSession(false); 
     if(s!=null) 
      s.invalidate(); 
     try{ 
     FacesContext.getCurrentInstance().getExternalContext().redirect("login.xhtml"); 
     FacesContext.getCurrentInstance().responseComplete(); 
     return null; 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
     throw new RuntimeException("Un authonticated user action"); 
    } 
+0

在JSF中獲取原始Servlet API是一種強大的「代碼異味」指示器。所以在這個特殊情況下了解託管財產注入。 – BalusC

回答

1
  1. 是的,你是對的。您必須讓JSF實例化bean以便管理它
  2. 如果不存在稱爲userManager的會話屬性(或bean)。但你最好通過注入來獲得這個實例。
  3. 沒有「最有效的方式」。這取決於你的要求。我經常手動完成它,因爲它非常簡單。如果它更復雜 - 彈簧安全性被認爲是好的(儘管我保留)。
  4. 它以任何方式進入會話,所以更喜歡bean。