如何将Controller类中的request.getParameter(string)与MySQL数据库进行比较?

时间:2012-03-30 18:52:34

标签: java javascript mysql html spring

我目前正在开发一个(相对)基本的Web应用程序,它可以作为虚构雇主的时钟。目前,该应用程序实现了HTML,JavaScript,Java,MySQL,Spring Framework和xml。我有一个登录页面,它接受用户输入的用户名和密码并存储信息。问题是,我似乎无法弄清楚如何获取该信息并将其与MYSQL数据库进行比较以成功登录。如有必要,我可以发布代码示例,并提前感谢您的帮助。

这是LoginController的一部分:

@RequestMapping(value = "/jsp/login")
public ModelAndView existUser(HttpServletRequest request) {
    return new ModelAndView("UserPrint.jsp", hashmap.makeHashMap());
}

@RequestMapping(value = "userLogin")
public ModelAndView loginUser(HttpServletRequest request,
        HttpSession session) {
    String strLoginJsp = "login.jsp";
    String strSessionErrorAttribute = "errors";
    User sessionUser = getUserFromSession(session);

    if (request.getHeader("referer") == null
            || request.getHeader("referer").contains("AddNewUser.html")) {
        session.setAttribute(SESSION_USER_ATTRIBUTE, new User());
        session.setAttribute(strSessionErrorAttribute, "");
        return new ModelAndView(strLoginJsp, hashmap.makeHashMap());
    }

    User requestUser = new User();
    String requestedUserName = request.getParameter("userName");
    requestUser.setUserName(requestedUserName);
    String requestedPassword = request.getParameter("password");
    requestUser.setPassword(requestedPassword);
    session.setAttribute(strSessionErrorAttribute, "");

    // Check if username and password is in DB
    User loginUser = userDao.login(requestUser);

    if (loginUser == null) {
        // Either the username doesn't exist, or the password was bad.
        if (userDao.userNameExist(requestedUserName)) {
            // user entered bad password
            if (sessionUser.getUserName() != null
                    && sessionUser.getUserName().equals(
                            requestUser.getUserName())) {
            } else {
                sessionUser.setUserName(requestUser.getUserName());
            }

        }
    } else {// username does not exist in db
        session.setAttribute(strSessionErrorAttribute,
                "Please register account.");

这是UserDao的一部分:

    @SuppressWarnings("unchecked")
@Transactional
public List<User> getAllUsers() {
    Query query = em.createNamedQuery("fetchAllUsers");
    return query.getResultList();
}

public User login(User user) {
    Query query = em.createNamedQuery("userLogin");
    query.setParameter("userName", user.getUserName());
    query.setParameter("password", user.getPassword());

    List<User> currentUsers = query.getResultList();

    if (currentUsers.size() > 0) {
        return (User) currentUsers.get(0);
    }

    return null;
}

@SuppressWarnings("unchecked")
@Transactional
public Boolean userNameExist(String userName) {
    Query query = em.createNamedQuery("getUserWithUsername");
    query.setParameter("userName", userName);
    List<User> existUser = query.getResultList();

    if (existUser.size() > 0) {
        return true;
    }
    return false;
}

4 个答案:

答案 0 :(得分:1)

通常您会使用您的登录名和密码并搜索用户

String queryStr = "SELECT * FROM users WHERE login='"+sanitize(userLogin)+"' AND password='"+sanitize(userPass)"'";

这不是真正的代码只是伪代码。我不知道java或spring如何处理卫生设施,但最重要的是,在构建查询字符串时,不要相信用户输入的任何内容。

这个想法是,如果这导致1个用户有效,如果它没有返回,则用户无效!

使用参数化查询可能是最好的方法

答案 1 :(得分:1)

要扩展dm03514的答案 - 是的,您应该通过在Java JDBC中使用预准备语句对象来“清理”用户输入。

答案 2 :(得分:1)

如果您使用的是Spring,那么您应该使用spring-security。他们已经为你做了很多事情,你只需配置它。

答案 3 :(得分:0)

是的,请发布一些代码。 究竟是什么问题?

在最基本的层面上,您应该能够:

  1. 将用户名和密码作为参数传递给HttpServletRequest对象
  2. 通过“名称”从Controller中的HSR对象检索所述参数。
  3. 将它们传递给SQL查询以与数据库字段进行比较。
  4. 上述哪些步骤失败了?