【问题标题】:Java Web application session variablesJava Web 应用程序会话变量
【发布时间】:2016-01-28 15:57:46
【问题描述】:

当前用户登录后,如何将他们的信息存储在会话变量中?在他们登录后,需要在整个 Web 应用程序中访问这些数据。

这是我目前所拥有的:

User.java

@Named
@Table
@Entity
@SessionScoped
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private long id;

    @Column(name = "firstname")
    private String firstname;

    @Column(name = "lastname")
    private String lastname;

    @Column(name="username")
    private String username;

    @Column(name = "password")
    private String password;

    public User() {}
...

UserData.java

@Named
@RequestScoped
public class UserData implements Serializable {

    private static final long serialVersionUID = 1L;
    SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    Session session = null;
    Transaction tx = null;
    List<User> users;
    String username;
    String password;

    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public UserData() {
        try {
            this.session = sessionFactory.openSession();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

public void login() {
    System.out.println("Authorize: Username: " + this.username + " Password: " + this.password);

    Query query = session.createQuery("from User U where U.username = :username and U.password = :password");
    query.setParameter("username", this.username);
    query.setParameter("password", this.password);
    System.out.println(query.list());
}

返回了正确的用户对象,但我不知道如何将用户对象保存在用户的会话数据中。

我正在使用的技术(如果有帮助的话):

  • 休眠
  • MySQL
  • JPA
  • JSF
  • 野蝇

【问题讨论】:

  • 您使用的是哪个网络框架?
  • @redflar3 我没有使用 Web 框架,这是普通的旧 javaEE。

标签: java session


【解决方案1】:

由于您的User 类由@Named 注释管理,您只需将其实例注入您要使用的类中即可访问当前用户:

@Inject
private User user;

另一种解决方案是使用这样的代码:

FacesContext context = FacesContext.getCurrentInstance();
User user = context.getApplication().evaluateExpressionGet(context, "#{user}", User.class);

【讨论】:

  • 您能否解释一下使用evaluateExpressionGet(...) 还是使用context.getAttributes().get("user") 更好
猜你喜欢
  • 2014-09-18
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2011-11-28
  • 2013-06-19
  • 1970-01-01
  • 2015-01-19
相关资源
最近更新 更多