java - 使用 hibernate/JPA 登录

标签 java hibernate jpa jpa-2.0

您好,我正在尝试创建一个登录表单并使用 hibernate 框架。

        String user = request.getParameter("username");
    String password = request.getParameter("password");

    EntityManagerFactory entityFactory = Persistence
            .createEntityManagerFactory("test");
    EntityManager entityManager = entityFactory.createEntityManager();

    String select = "SELECT userName, passWord FROM UserAccounts WHERE userName='"
            + user + "' and passWord='" + password + "'";

    Query query = entityManager.createQuery(select);

    if(query.getResultList().size() == 0){
        System.out.println("Account does not exist!");
    }else{
        System.out.println("Login Success!");
        UserAccounts login = (UserAccounts) query; //error here
        System.out.println(login.getUserName());
    }

问题是我在尝试将查询结果转换为帐户对象时遇到错误。

正确的转换方式是什么? 谢谢!

最佳答案

使用变量和绑定(bind)参数来防止注入(inject)攻击并选择UserAccounts对象。

String select = "SELECT ua FROM UserAccounts ua WHERE ua.userName=:userName and ua.passWord=:password";

Query query = entityManager.createQuery(select);
query.setParameter("userName", user);
query.setParameter("password", password);

使用getSingleResult(),因为一个用户/密码应该只能识别一个用户。 (也可以防止一些攻击)并将其转换为您选择的类(a UserAccounts)

UserAccounts ua = (UserAccounts) query.getSingleResult();

PS:切勿在数据库中以明文形式存储密码。请改用单向哈希。例如。 bcrypt

关于java - 使用 hibernate/JPA 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33094572/

相关文章:

java - 在 IntelliJ Idea 中删除 .orig 文件

java - 使用不同的查询参数 JOIN 不同的方法 : REST

java - java中比较两个字符串

java - 在一个 session 期间提交多个事务会提高性能吗?

java - 使用 JpaRepository 更新实体中的列表项(保留主键)

java - 错误: Not an entity.但是@Entity和persistence.xml正确

java - 评估 JPA 提供程序 : Market share of Hibernate/EclipseLink?

java - Nimbus 外观改变了 JButtons 的颜色

java - org.hibernate.hql.internal.QueryExecutionRequestException : Not supported for DML operations [insert into

java - 为什么 RESTcontroller 在 JSON 中多次返回相同的结果?