Sultana Tasneem:
Estoy tratando de implementar este código para procesar el inicio de sesión de usuario, pero no funciona.
Se salta la sentencia if en el código que significa que algo está mal en la validación de usuario o la selección. Simplemente va a la página de error después de pulsar el botón de enviar.
Aquí está el código que estoy utilizando a continuación
CustomerController:
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");
}
archivo de inicio de sesión 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>
Bashir:
- en primer lugar, respetar los casos en
request.getParameter("UserName");
mismo que en nombre de etiqueta de entrada<input type="text" name="UserName" />
String firstname = request.getParameter("firstname");
esta línea va a tratar de extraer el parámetrofirstname
de ustedPOST
solicita, en otras palabras, lo extrae de su formulario de inicio de sesión que sólo contiene dos campos de usuario y contraseña. por lo que sólo tiene que borrar esta línea de código.- sin necesidad de utilizar esta
User.getTransaction().begin();
en la obtención de datos de la base de datos - su consulta es incorrecta
probar este código:
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);