Spring
Spring(로그인-3 cookie)
불도정
2023. 4. 26. 01:31
이번 시간엔 아이디 저장 및 로그인 성공시 input placeholder에 아이디가 저장되게 해주는 cookie를 설정해 보겠다
이전시간에 했던 코드에서 좀더 추가 해주자
@PostMapping("/login")// => @RequestMapping(value="/login", method = RequestMethod.POST)
public String login(@ModelAttribute Member inputMember,
Model model,
RedirectAttributes ra,
HttpServletResponse resp,
HttpServletRequest req,
@RequestParam(value="saveId", required=false) String saveId) {
login 메소드에 쿠키가 적용될 범위를 지정하기 위해 req, 쿠키를 응답 시 클라이언트에게 전달하기위해 resp르 추가해준다.
다음은 로그인 성공시에 아이디 저장 체크 여부에 따라 쿠키를 생성하는 코드를 작성해보자
@PostMapping("/login")
public String login( @ModelAttribute Member inputMember,
Model model,
RedirectAttributes ra,
HttpServletResponse resp,
HttpServletRequest req,
@RequestParam(value="saveId", required=false) String saveId ) {
logger.info("로그인 기능 수행됨");
logger.debug(inputMember.getMemberEmail());
logger.debug(inputMember.getMemberPw());
Member loginMember = service.login(inputMember);
if(loginMember != null) { // 로그인 성공시
model.addAttribute("loginMember", loginMember);
// 로그인 성공 시 무조건 쿠키 생성
// 단, 아이디 저장 체크 여부에 따라서 쿠키의 유지 시간을 조정
Cookie cookie = new Cookie("saveId", loginMember.getMemberEmail());
if(saveId != null) { // 아이디 저장이 체크되었을 때
cookie.setMaxAge(60 * 60 * 24 * 365); // 초 단위로 지정 (1년)
}else {// 체크 안되었을때
cookie.setMaxAge(0);
}
// 쿠키가 적용될 범위(경로) 지정
cookie.setPath(req.getContextPath());
// 쿠키를 응답 시 클라이언트에게 전달
resp.addCookie(cookie);
} else {
// model.addAttribute("message", "아이디 또는 비밀번호가 일치하지 않습니다.");
ra.addFlashAttribute("message", "아이디 또는 비밀번호가 일치하지 않습니다.");
}
return "redirect:/";
}
if else문을 통해 로그인 성공시에 우선은 쿠키를 무조건 생성하도록 설정하였다.
그 뒤에 아이디 저장 체크 여부에 따라서 쿠키를 오래 저장해둘지 아니면 바로 삭제 시킬지 여부를 또 if else을 통해 구현하였다.
또한 체크박스의 value는 on 아니면 null로 나온다. 그러므로 saveId 가 null이 아니라면 쿠키의 유지시간을 조정하도록 if else문을 작성한 것이다.
*saveId는 jsp에 있는 checkbox이다.
<c:if test="${ !empty cookie.saveId.value}">
<%-- chk 변수 생성(page scope)--%>
<c:set var="chk" value="checked"/>
</c:if>
<label>
<!-- checked 속성 : radio/checkbox를 체크하는 속성 -->
<input type="checkbox" name="saveId" ${chk} id="saveId"> 아이디 저장
</label>
main.jsp 에 있는 check박스와 check박스에 체크가 되어 있을 시 플레이스홀더에 저장한 이메일을 나타나게 해주는 코드이다.
쿠키가 잘 생성되었는지는 다음편에 로그아웃 기능을 구현하면서 알아보자