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박스에 체크가 되어 있을 시 플레이스홀더에 저장한 이메일을 나타나게 해주는 코드이다.

 

쿠키가 잘 생성되었는지는 다음편에 로그아웃 기능을 구현하면서 알아보자