@GetMapping("/loginPage")
public String userLoginPage(HttpSession session){
return "users/loginOrSignup";
}
먼저 로그인 버튼을 클릭하면 요청을 받을 controller이다
해당 요청을 통해서 users폴더안에 있는 loginSignup.html 페이지로 이동을한다.
@PostMapping("/enrollform")
public String userLogin(Users user, HttpSession session,
RedirectAttributes redirectAttributes){
=> Spring MVC에서 리다이렉트 후에 일시적인 데이터를
전달할 때 유용한 인터페이스이다
RedirectAttributes는 리다이렉트를 하면서 일시적인 데이터를 전달할 수 있게 도와줍니다.
예를 들어
폼을 제출한 후 성공 메시지나 오류 메시지를 리다이렉트된 페이지로 전달할 때 사용된다.
Users userLogin = userService.userLogin(user);
if(userLogin != null && passwordEncoder.matches(user.getUsersPassword(), userLogin.getUsersPassword())) {
session.setAttribute("userLogin", userLogin);
redirectAttributes.addFlashAttribute("successMsg", user.getUsersId() + "님 환영합니다.");
return "redirect:/";
}else{
사용법 : redirectAttributes.addFlashAttribute("errorMsg", "아이디 또는 비밀번호가 틀렸습니다");return "redirect:/loginPage";
}
}
passwordEncoder.matches(user.getUsersPassword(), userLogin.getUsersPassword())
암호화 처리중 기존 users 객체에 저장된 데이터를 불러와 해당 로그인을 시도하는
데이터를 비교를 한 후 조건이 맞으면 메세지와 함께
리다이렉트한다. 이 때
redirectAttributes.addFlashAttribute("successMsg", user.getUsersId() + "님 환영합니다.");
redirectAttributes.addFlashAttribute을 사용하게 되면 일회성으로 메세지가 남게 되어서 새로고침을 하더라도
메세지는 1회만 뜨게 된다.
<select id="loginUser" resultType="Users">
select *
from USERS
where USERS_ID = #{usersId} AND USERS_STATE = 'n'
</select>
암호화 이후 내가 잘못한 문제는
바로 userId와 password를 동시에 AND 조건으로 사용을 하고 있었다.
where USERS_ID = #{usersId} AND USERS_STATE = 'n' AND password
이렇게 된다면 암호화된 계정으로 평문을 계속보내다보니 로그인이 되지 않았다
바르게 login을 성공 시키려면
controller에서 해당 객체가 기존에 가지고 있는 데이터를 복호화 처리를 한 후에
데이터를 넘겨야 했다.