Java 无法从mysql检索要登录的用户标识(用户名和密码)

Java 无法从mysql检索要登录的用户标识(用户名和密码),java,hibernate,spring-mvc,session,jpa,Java,Hibernate,Spring Mvc,Session,Jpa,我试图实现这段代码来处理用户登录,但不起作用 它跳过代码中的if语句,这意味着用户验证或选择中出现了错误。按下“提交”按钮后,它将进入错误页面。 下面是我正在使用的代码 客户控制器: HttpSession session = request.getSession(); String userName = request.getParameter("userName"); String password = request.getPar

我试图实现这段代码来处理用户登录,但不起作用

它跳过代码中的if语句,这意味着用户验证或选择中出现了错误。按下“提交”按钮后,它将进入错误页面。
下面是我正在使用的代码

客户控制器:

          HttpSession session = request.getSession();

         String userName = request.getParameter("userName");
          String password = request.getParameter("password");
          String firstname = request.getParameter("firstname");

          User.getTransaction().begin();

          Query query = User.createQuery("select p from Customer where p.userName=:uName");
          query.setParameter("uName", userName);

          @SuppressWarnings("unchecked")
           List<Customer> Result = query.getResultList();

          User.close();

          if(Result.size()>0)       
            if(Result.get(0).getPassword().equals(password))
            {
                Customer pass=Result.get(0);
                session.setAttribute("Id", pass.getId());

                String message="Welcome " + firstname;
            return new ModelAndView("userpage","pass",pass);
            }

            return new ModelAndView("error","message","Wrong credentials");
           }    
HttpSession session=request.getSession();
字符串userName=request.getParameter(“用户名”);
字符串密码=request.getParameter(“密码”);
String firstname=request.getParameter(“firstname”);
User.getTransaction().begin();
Query Query=User.createQuery(“从客户中选择p,其中p.userName=:uName”);
query.setParameter(“uName”,用户名);
@抑制警告(“未选中”)
List Result=query.getResultList();
User.close();
如果(Result.size()>0)
if(Result.get(0).getPassword().equals(password))
{
客户通行证=结果。获取(0);
session.setAttribute(“Id”,pass.getId());
String message=“Welcome”+firstname;
返回新的ModelAndView(“用户页面”、“通过”、“通过”);
}
返回新的ModelAndView(“错误”、“消息”、“错误凭据”);
}    
登录jsp文件:

          <form action="signin" method="post">

            <table align="center">
                <tr>
                    <td>
                        <label>User Name</label>
                    </td>
                    <td>
                        <input type="text" name="UserName" />
                    </td>

                </tr>  
                <tr>
                    <td>
                        <label >Password</label>
                    </td>
                    <td>
                        <input type="text" name="password" />
                    </td>

                </tr>   
                  <tr>
                    <td></td>
                    <td>
                        <button id="login" type="submit" name="login" style="width:100%;border- 
           radius:10px;text-shadow:2px 2px 3px 
           rgba(150,150,150,0.75);font-family:time">Login</button>
                    </td>
                </tr> 
            <tr>
            <td><a href="register">Don't have an account? Sign Up?</a>
            </td>
           </tr>
          </table>
          </form>

用户名
密码
登录
  • 首先,尊重
    request.getParameter(“用户名”)中的情况与输入标记的名称相同
  • stringfirstname=request.getParameter(“firstname”)
    此行将尝试从您的
    POST
    请求中提取参数
    firstname
    ,换句话说,它从您的登录表单中提取参数,该表单只包含两个登录和密码字段。所以你只需要删除这行代码
  • 无需使用此
    User.getTransaction().begin()
  • 你的问题是错误的
请尝试以下代码:

        HttpSession session = request.getSession();
        /*get username and password from the login form*/
        String userName = request.getParameter("UserName");
        String password = request.getParameter("password");

        /*query to search customer having the username and password inserted in the login form*/
        Query query = User.createQuery("select p from Customer p where p.userName = :uName and p.password = :uPassword");
        query.setParameter("uName", userName);
        query.setParameter("uPassword", password);

        /*getting the result*/
        Customer pass = (Customer) query.getSingleResult();

        User.close();

        /*if not null, means we have found the user (correct username and password), else login failed)*/
        if(pass!=null){
            session.setAttribute("Id", pass.getId());
            String message="Welcome " + pass.getFirstname();
        }
        else{
            String message="Authentication Error";
        }

        return new ModelAndView("userpage","pass",pass);

不起作用??这对远程调试团队没有多大帮助!!请指定它的作用!它没有做你希望它能做的事!你期望它做什么!它跳过代码中的if语句,这意味着用户验证或选择中出现了错误。按下submit(提交)按钮后,它将进入错误页面,但该按钮不起作用。我仍然收到以下错误消息java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:语法错误解析[从customer中选择p,其中p.userName=:uName和p.password=:uPassword]。[24,24]必须为范围变量声明提供标识变量。