用Struts1 + hibernate登陆的时候的问题,一个用户名可以用多个密码(只要是数据库里的密码)登录,就是不能一个用户名一个密码登录,大家指点下怎么弄,代码如下:先建个接口
public interface UserDao {
public int isExist(String username,String password);
}
然后具体实现类
public class UserDaoImpl implements UserDao { public int isExist(String username, String password) {
Session session = (Session) new Configuration().configure()
.buildSessionFactory().openSession(); Query query = session.createQuery("from Users u where u.username=?");
query.setString(0, username);
List list = query.list();
if (null == list || 0 == list.size()) {
return -1;// 用户名不存在
}
Query query2 = session
.createQuery("from Users u where u.username=? and u.passwd=?");
query2.setString(0, username);
query2.setString(1, password);
List list2 = query.list();
if (null == list2) {
return -2;// 密码错误
}
Iterator it = list.iterator();
Users user = (Users) it.next();
return user.getUserid();
}
}
下面是Action调用那个方法
public class LoginAction extends Action {
/*
* Generated Methods
*/ /**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
String username=loginForm.getUname();
String password=loginForm.getUpass();
UserDao userdao=new UserDaoImpl();
int state=userdao.isExist(username, password) ;
if(state==-1){
return mapping.findForward("er");
}else if (state==-2){
return mapping.findForward("er");
}
else {
request.setAttribute("myName",username);
request.setAttribute("myPasswd",password);
return mapping.findForward("suc");
}
public interface UserDao {
public int isExist(String username,String password);
}
然后具体实现类
public class UserDaoImpl implements UserDao { public int isExist(String username, String password) {
Session session = (Session) new Configuration().configure()
.buildSessionFactory().openSession(); Query query = session.createQuery("from Users u where u.username=?");
query.setString(0, username);
List list = query.list();
if (null == list || 0 == list.size()) {
return -1;// 用户名不存在
}
Query query2 = session
.createQuery("from Users u where u.username=? and u.passwd=?");
query2.setString(0, username);
query2.setString(1, password);
List list2 = query.list();
if (null == list2) {
return -2;// 密码错误
}
Iterator it = list.iterator();
Users user = (Users) it.next();
return user.getUserid();
}
}
下面是Action调用那个方法
public class LoginAction extends Action {
/*
* Generated Methods
*/ /**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
String username=loginForm.getUname();
String password=loginForm.getUpass();
UserDao userdao=new UserDaoImpl();
int state=userdao.isExist(username, password) ;
if(state==-1){
return mapping.findForward("er");
}else if (state==-2){
return mapping.findForward("er");
}
else {
request.setAttribute("myName",username);
request.setAttribute("myPasswd",password);
return mapping.findForward("suc");
}
if (null == list2) {
return -2;// 密码错误
}
这个判断有没有问题,是不是哪怕没有一条记录,query.list()也不会等于null
.createQuery("from Users u where u.username=? and (u.passwd=? or u.passwd1=?)");用or隔开就可以了
query.setString(0, username);
List list = query.list();
if (null == list || 0 == list.size()) {
return -1;// 用户名不存在
}
Query query2 = session
.createQuery("from Users u where u.username=? and u.passwd=?");
query2.setString(0, username);
query2.setString(1, password);
List list2 = query.list();------------没弄明白你是写错了还是??????
if (null == list2) {
return -2;// 密码错误
}
Iterator it = list.iterator();
Users user = (Users) it.next();
return user.getUserid();
}
}
List list2 = query.list();------- 是不是query2.list();?????????????????????????