没有会话工厂的身份验证登录屏幕



我正在使用Spring, Maven和Hibernate。我有这个登录页面的用户名和密码。我试图验证客户端,以确保他/她使用正确的用户名和密码从数据库。当用户点击提交时,页面呈现到localhost:8080/Login/Login,并显示404错误。我希望能够在主页上呈现结果。

我不太确定这个表单动作是如何工作的。下面是我的JSP

<form  action = "login" id="login" method="post">

    Username<input type="text" id="text" /> <br>
    Password<input type="text" id="text" /> <br>
    <input type="submit"  value="Submit" />
</form>

这是我的服务dao层:@ service公共类LoginService{

private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
    return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
@Transactional
public List<tbl_login> getUsers() {
    List<tbl_login> userList = new ArrayList<tbl_login>();
    try {
        userList = sessionFactory.getCurrentSession().createCriteria(tbl_login.class).list();
    } catch (Exception e){
        e.printStackTrace();
    }
    return userList;

最后,这是控制器:{

@ controller公共类LoginController

LoginService loginService = (LoginService) ServiceLocator.getInstance()
        .findService("loginService");
@RequestMapping(value = "/", method = RequestMethod.POST)
public String login(@RequestParam(value = "username") String username,
        @RequestParam(value = "password") String password, Locale locale,
        Model model) {
    List<tbl_login> login = loginService.getUsers();
    for (tbl_login tbl_login : login) {
        if (tbl_login.getUsername().equalsIgnoreCase(username)) {
            if (tbl_login.getPassword().equals(password)) {
                model.addAttribute("username", username);
            }
        }
    }
    return "/";
}

您当前的代码有一些问题:

  1. 没有方法绑定到这个URL: /login(您的表单操作到那里)您应该将控制器方法更改为@RequestMapping(value = "/login", method = RequestMethod.POST)

  2. 我建议在loginService之上使用@Autowired而不是"ServiceLocator.getInstance()...."

  3. 我不确定sessionFactory是否会被注入(我没有看到任何注释,但也许你没有发布它)

  4. 我建议使用<form:form>而不是<form>,以便将来您能够利用spring的功能。

  5. Username<input type="text" id="text" />应更改为Username<input type="text" name="username" id="text" />(以及密码-以便控制器识别它们)

从这里开始,然后从这里开始调试。

祝你好运!

最新更新