2013-04-30 63 views
0

假设我没有任何的网页“密码保护”,但有时需要知道哪些用户点击一些JSF的按钮,是下面的好,或者我应该也使用HttpServletRequest.login()我可以跳过HttpServletRequest.login(),只需将会话中的authed用户?

一些托管Bean,它的手柄登录:的commandButton:

public void login(String name, String password) { 
    try { 
     HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
     MyUser user = userEjb.login(name, password); 
     request.getSession().setAttribute("user", user); 
    } catch { 
    //login failed message.. 

    } 
} 

方法由H调用

public void doSomething() { 
     HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
     MyUser user = request.getSession().getAttribute("user"); 
     //Is the user object 'safe' here? 
} 

回答

1

是没有错的想法,假设你login操作被称为在登录时,另一个片段是按下按钮,但我会小心会议中放置的内容。

例如,如果密码持久存在于MyUser类中,则不希望存储在会话中。之所以?可以从服务器浏览会话,因此未加密的密码对于可以访问系统的恶意/恶意的人员可见。

此外,如果有人不小心将用户对象转储到网页或发生错误时会发生什么?因此,考虑到上述基于偏执狂的独白,我的建议是存储一个等同于您的MyUser对象的视图bean,该对象只包含用于应用程序的最小字段(用户名,名称),例如上次修改的领域等

+0

谢谢。好的提示,以尽量减少投入会议的对象 – 2013-05-01 14:23:13

相关问题