登录使用休眠来检索用户名和密码
问题描述:
我想有一个登录页面使用休眠从mySQL数据库中检索用户名和密码。我的代码如下 对于我的HTML页面,我有一个使用get方法的表单。登录使用休眠来检索用户名和密码
form action="PlaylistServlet" method="get">
<input type = "text" name ="userId" placeholder="userName">
<input type="password" name="password" placeholder="Password">
<input type="submit" value="submit">
</form>
下面是从HTML页面传递数据到服务等级和重定向回来,如果用户名和密码对不正确的登录页面我的servlet doGet方法。
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Users user1 = new Users();
String userName = request.getParameter("userName");
String password = request.getParameter("password");
SetData sd = new SetData();
Users us = sd.get(userName); //get method in service class. Line 38
String passwordDB = us.getPassword();// line 39
if (user1.checkPassword(password, passwordDB)) {
response.sendRedirect("UserLogin.html");
}
}
以下是我的服务类get方法,它使用hibernate会话从mySQL数据库检索数据。我从HTML页面传入用户名作为session.get()方法的主键。
public Users get(String userName) {
Users us = null;
SessionFactory sf = null;
Session session1 = null;
try {
sf = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
session1 = sf.openSession();
Transaction tx = session1.beginTransaction();
us = (Users) session1.get(Users.class,userName); // line 64
tx.commit();
session1.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
sf.close();
}
return us;
}
在这一切结束时运行的代码后,我得到的错误mesages下面
java.lang.IllegalArgumentException: id to load is required for loading
at com.marv.service.SetData.get(SetData.java:64)
at com.marv.service.PlaylistServlet.doGet(PlaylistServlet.java:38)
java.lang.NullPointerException
at com.marv.service.PlaylistServlet.doGet(PlaylistServlet.java:39)
我相信,我的问题是在Hibernate的Session的get(类clazz中,序列化的ID)抛出HibernateException的方法,但我不知道我做错了什么。
答
session1.get(Users.class,userName);
正在寻找作为userName
参数的id(主键)。要么您可以更改表,以便用户名是主键,或者创建一个选择通过用户名查找id的dao。
答
session.get需要一个pk。还检查你的参数\表单变量,他们似乎不一致。 尝试此语法休眠:
用户= session.createCriteria(Users.class, “用户”) 。新增(Restriction.eq( “user.username”,用户名))uniqueResult();
我想你应该看到这个:http://*.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it – soorapadman
而_never_ store plain数据库中的密码 - 请使用[安全散列](https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords)! –