카테고리 없음

KH 파이널 프로젝트 로그인 기능 구현하기 트러블 슈팅 하기

최종군 2024. 11. 13. 23:53

 

@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에서 해당 객체가 기존에 가지고 있는 데이터를 복호화 처리를 한 후에 

데이터를 넘겨야 했다.