No estoy seguro de lo estúpido que he codificado esto, pero estoy intentando hacer que un usuario firme que haga referencia cruzada a mi base de datos mySql. No estoy seguro si estoy haciendo esto correctamente. Gracias por cualquier consejo.
Método de inicio de sesión
@Repository public class LoginDAOImpl implements LoginDAO { private SessionFactory sessionFactory; @Override public boolean checkLogin(String userName, String password) { Session session = sessionFactory.openSession(); boolean userLogin = false; Query query = session.createQuery("FROM Users u WHERE u.userName=? AND u.password=?"); query.setParameter(0, password); query.setParameter(1, userName); List list = query.getResultList(); if ((userName != null) && (list.size() > 0)) { userLogin = true; } return userLogin; } }
Controlador
@Controller public class UserController { private UserDAO userDAO; @Autowired private LoginDAOImpl loginDAO; @Autowired public void setUserDao(UserDAO userDAO){ this.userDAO = userDAO; } @GetMapping("/home") public String userSignup(Model model, @RequestParam("username")String username, @RequestParam("password") String password){ loginDAO.checkLogin(username, password); return "user-signin"; } @GetMapping("/UserForm") public String userSigninForm(Model model){ model.addAttribute("user", new Users()); return "user-signup"; } @PostMapping("/saveUser") public String savedUserForm(@ModelAttribute("user") Users users){ userDAO.save(users); return "redirect:/home"; } }
No creo que tu código tenga la oportunidad de funcionar:
Parámetros en su consulta ordenados como: nombre de usuario, contraseña; pero llama al método setParameter(...) con índices incorrectos.
Query query = session.createQuery("FROM Users u WHERE u.userName=? AND u.password=?"); query.setParameter(0, password); query.setParameter(1, userName);
¿Por qué se realiza la validación del nombre de usuario después de ejecutar la consulta?
Dado que está utilizando Spring Framework en su proyecto, puede utilizar el proyecto Spring Security. Los muchachos de Spring ya se encargaron de lo que está tratando de implementar.