如何登录jsf

时间:2011-07-20 12:53:41

标签: java jsf

我有一个名为'usermanager'的会话作用域托管bean。我想在usermanager bean的属性中存储新登录的用户信息,并使用下面的静态metod访问它。我想问这些问题,提前谢谢,抱歉英语不好。

如果我通过jsf injection mechanizm得到它,则管理1-a托管bean。那就是如果我使用新的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");
    }

1 个答案:

答案 0 :(得分:1)

  1. 是的,你是对的。您必须让JSF实例化bean才能进行管理
  2. 如果没有名为userManager的会话属性(或bean)。但是你最好通过注射来获得这个实例。
  3. 没有“最有效的方法”。这取决于您的要求。我经常手动完成它,因为它很简单。如果它更复杂 - 据说弹簧安全性很好(尽管我保留了)。
  4. 它会在会话中进行,所以更喜欢bean。