使用 hibernate/JPA 登录
Login using hibernate/JPA
您好,我正在尝试创建一个登录表单并使用休眠框架。
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());
}
问题是我在尝试将查询结果转换为帐户对象时遇到错误。
正确的转换方式是什么?
谢谢!
使用HQL查询。它 returns class UserAccounts
.
的实例
String selectQuery = "FROM UserAccounts WHERE userName= :user and passWord= :password";
selectQuery.setParameter("user", user);
selectQuery.setParameter("password", password);
使用Query#setParameter设置传递参数进行查询。
使用变量和绑定参数来防止注入攻击和select 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()
,因为user/password应该只标识一个用户。 (也可以防止一些攻击)并将其施放给 class 你 selected (a UserAccounts
)
UserAccounts ua = (UserAccounts) query.getSingleResult();
PS:切勿在数据库中以明文形式存储密码。请改用单向哈希。例如。 bcrypt
您好,我正在尝试创建一个登录表单并使用休眠框架。
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());
}
问题是我在尝试将查询结果转换为帐户对象时遇到错误。
正确的转换方式是什么? 谢谢!
使用HQL查询。它 returns class UserAccounts
.
String selectQuery = "FROM UserAccounts WHERE userName= :user and passWord= :password";
selectQuery.setParameter("user", user);
selectQuery.setParameter("password", password);
使用Query#setParameter设置传递参数进行查询。
使用变量和绑定参数来防止注入攻击和select 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()
,因为user/password应该只标识一个用户。 (也可以防止一些攻击)并将其施放给 class 你 selected (a UserAccounts
)
UserAccounts ua = (UserAccounts) query.getSingleResult();
PS:切勿在数据库中以明文形式存储密码。请改用单向哈希。例如。 bcrypt