一尘不染

用Hibernate登录并存储已记录的用户名

tomcat

我正在开发一个简单的项目云,登录后注册的用户可以在其中下载和上传文件。我正在使用Eclipse Java
EE,JSF和Hibernate进行开发。在我的项目中,我可以登录到用户,如果数据正确,我可以打开用户菜单,但无法确定在哪里存储有关已登录用户的信息。尚不清楚会话的概念。我已经阅读了一些有关Hibernate和会话的内容,但我还不了解。我至少需要保留当前登录用户的用户名,使用什么对象?在哪里?你可以帮帮我吗?谢谢

@ManagedBean
@SessionScoped
public class Login {

private String userId;
private String password;

public Login() {}

public String getUserId() {
    return userId;
}
public void setUserId(String userId) {
    this.userId = userId;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

public String loginUser (){
    SessionHandler s = new SessionHandler();
    Session sessione = s.getDb();
    sessione.beginTransaction();
    Query query = sessione.createQuery( "Select password from Utenti where username= :id" );
    System.out.println("Qui lo prende: " + this.getUserId());
    query.setParameter("id", userId);
    System.out.println("tag debug");
    List<Utenti> res= query.list();
    if(password.equals(res.get(0))){
        this.setUserId(userId);
        return "first";

    }
    else
        return "noaccess";
}

我需要在TreeBean中使用userid。这是我的TreeBean:

@ManagedBean
@SessionScoped
public class TreeBean {

@ManagedProperty(value="#{login.userId}")
private String user;

private TreeNode root;
private TreeNode selectedNode;
private Session db;

public Session getDb() {
    return db;
}

public void setDb(Session db) {
    this.db = db;
}

public void setUser(String user) {
    this.user = user;
}

public String getUser(){
    return user;
}

public TreeBean() {  
    root=new DefaultTreeNode("Root", null);
    System.out.println("Prova"+ user);
    recursive(0, root);

}

在.xhtml中,文件可以读取userid,而不会出现任何问题。为什么?谢谢


阅读 259

收藏
2020-06-16

共1个答案

一尘不染

您需要创建一个会话范围的ManagedBean。登录时,您可以在该ManagedBean中设置用户对象(从数据库获取)。然后,您将可以通过所有应用程序访问它。

另一种方法是直接在会话中设置用户对象:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
Map<String, Object> sessionMap = externalContext.getSessionMap();

然后:

sessionMap.put("attributeName", whateverYouWantToSaveInSession);

但是我会选择第一种方法。

2020-06-16