您好,我正在尝试创建一个登录表单并使用 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/