2015-10-21 139 views
0

我想有一个登录页面使用休眠从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的方法,但我不知道我做错了什么。

+0

我想你应该看到这个:http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it – soorapadman

+0

而_never_ store plain数据库中的密码 - 请使用[安全散列](https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords)! –

回答

0
session1.get(Users.class,userName); 

正在寻找作为userName参数的id(主键)。要么您可以更改表,以便用户名是主键,或者创建一个选择通过用户名查找id的dao。

0

session.get需要一个pk。还检查你的参数\表单变量,他们似乎不一致。 尝试此语法休眠:

用户= session.createCriteria(Users.class, “用户”) 。新增(Restriction.eq( “user.username”,用户名))uniqueResult();