在我的项目中,我有一个包含电子邮件和密码字段的页面。 我的要求是,在填写用户名和密码字段后,当我按下提交时,它将检查数据库表中的用户名和密码字段。如果匹配则会转到配置文件页面。
所以,我这样做了:
mycontroller类是:
@RequestMapping(value = "/signin", method = RequestMethod.POST)
public String dologin(@ModelAttribute("student") Student student,HttpServletRequest request,
HttpServletResponse response,BindingResult result) {
try{
studentService.LoginStudent(student.getEmail(), student.getPassword());
if (result.hasErrors()) {
return "signin";
}
}
catch(ConstraintViolationException e){
}
return "profile";
}
我的StudentServiceimpl.java是:
public Student LoginStudent(String email, String password) {
Student student = new Student(email,password);
studentDao.LoginStudent(student);
return student;
}
和StudentDao.java是:
public void LoginStudent(Student student) {
String hql = "select student_id from student where email = :email and password = :password";
sessionFactory.getCurrentSession().createSQLQuery(hql)
.setParameter("email", student.getEmail())
.setParameter("password", student.getPassword());
}
现在,问题是如果我把任何电子邮件ID和任何密码直接转到配置文件页面。如果字段为空,那么它也会转到配置文件页面。为什么它不检查字段?< / p>
答案 0 :(得分:2)
我认为无论你使用result.hasErrors()做什么都不能很好地服务
我认为如果条件如下,我应该对待它:
Student student = studentService.LoginStudent(student.getEmail(), student.getPassword());
if (student != null) {
return "signin";
}
BindingResult类在这里不合适。它对表单验证很有用(通过验证方法)。
请阅读What is the use of BindingResult interface in spring MVC?
同样在您的hibernate代码中,您没有执行查询,请执行以下操作
Query query = sessionFactory.getCurrentSession().createSQLQuery(hql)
.setParameter("email", student.getEmail())
.setParameter("password", student.getPassword());
return query.list();
以上程序仅供参考,您需要对代码进行额外的工作,如解析和所有。
答案 1 :(得分:0)
看你没有通过hql查询返回。 return true表示用户存在其他false。 你的控制器应该是这样的
try {
if (result.hasErrors()) {
return "signin";
}
bool res = studentService.LoginStudent(student.getEmail(), student.getPassword());
if (res) {
return "profile";
} else {
return "sign_in";
}
} catch (ConstraintViolationException e) {
}
return "profile";
}
答案 2 :(得分:0)
doLogin
方法中的整个代码通常是错误的。
RequestMapping(value = "/signin", method = RequestMethod.POST)
public String dologin(@ModelAttribute("student") Student student, BindingResult result) {
// No need for HttpServletRequest request and
// HttpServletResponse response
String urlOrPage = null;
// First perform whether result has errors
if(!result.hasErrors) {
// If there are no errors, fetch Student
Student student = studentService.loginStudent(student.getEmail(), student.getPassword());
// If credentials are wrong, it will return null, if not, it will return Student.
if(student != null) {
urlOrPage = "redirect:/profile";
} else {
urlOrPage = "signin";
}
} else {
urlOrPage = "signin";
}
return urlOrPage;
}
考虑到:
Student
类中的验证注释已正确放置