[졸업프로젝트04] TAG- 로그인 아이디 저장

kangsun·2022년 12월 4일
0

Spring

목록 보기
16/24

로그인 실패 메세지 (데이터베이스연동)

로그인 성공 실패 메세지 참고 블로그
https://kimvampa.tistory.com/122

여기 블로그가 내가 배운 내용으로 설명이 잘 되어있어 활용하기 좋았다.

아이디 저장

1. loginForm.jsp / 로그인 페이지

  • 로직 : 아이디 저장 ✔️ 체크하면 ? → 쿠키 생성 (아이디 저장) → 세션에 저장

(1) EL을 사용해서 쿠키에 id값이 있으면 value에 저장.
(2) checkbox에 쿠키에 id값이 있으면 checked, 없으면 빈문자열

  • 아이디에 value값으로 cookie에 저장된 아이디값 넣어준다.
  • 아이디저장 부분에 cookie에 저장된 값이 있으면 checked 표시해준다.

    쿠키에 id 정보 있을 경우 ? → 아이디저장을 "checked" ✔️
$ {empty cookie.id.value ? "" :  "checked"}

쿠키값이 비어있다(empty)면 ? → true 일때 - ""
쿠키값이 비어있다(empty)면 ? → faulse 일때 - checked
[삼항연산자] 조건문 ? 참 : 거짓
조건문, 물음표(?), 조건문이 참(truthy)일 경우 실행할 표현식, 콜론(:), 조건문이 거짓(falsy)일 경우 실행할 표현식이 배치

2. Controller.java (회원로그인 컨트롤러)

  • loginForm.jsp에 있는 아이디저장 name="saveId"를 가져온다.

  • 로그인 성공되었다는 전제 하에!
    form에서 변수로 가져온 saveId가 null이 아니라면(아이디 저장 체크가 되어있다면!) 쿠키값 저장해줌.
    null값이 들어온다면 (아이디저장 체크 X), 쿠키에 id를 저장하면서 쿠키의 수명을 0으로 설정하면 쿠키가 삭제된다.
	// 로그인 성공,실패 결과
	// login.do가 post로 요청이 오면
	@RequestMapping(value = "/login.do", method = RequestMethod.POST)
	public ModelAndView loginGeneralProc(@ModelAttribute MemberGeneralDTO dto, 
														 HttpServletRequest req, 
														 HttpServletResponse resp, 
														 HttpSession session) throws Exception{
		
		// 사용자가 loginForm에 입력한 아이디(m_id) 와 비밀번호(m_pw) 가져오기.
		String id=dto.getM_id();
		String pw=dto.getM_pw();	
		
		// 아이디 저장 가져오기 <input type="checkbox" ${empty cookie.id.value ? "":"checked" } name="saveId" value="SAVE">아이디 저장</label>
		String saveId = req.getParameter("saveId");
		//System.out.println(saveId); 
		// -> 아이디저장 체크를 하면 "SAVE" 값이 들어오고, 체크하지않으면 null값이 들어온다.
		
		
		
		// DB에 저장돼있는 아이디와 비밀번호 비교해야함.
		dto.setM_id(id);
		dto.setM_pw(pw);
		
		// mapper에서 담아온 select문을 DAO에 담아준 후 그 값을 변수에 담아준다. --> B등급 나옴.
		String mem_grade = memberGeneralDao.select(dto);
		
		
		// mapper -> DAO 에 담아온 sql문 값이 있는지? 없는지? 
		ModelAndView mav = new ModelAndView();
		if(!(mem_grade == null)) {
			// 로그인 성공
			// 로그인 되면 세션값 저장
			session.setAttribute("mem_grade", mem_grade);

			
			Cookie cookie=null;
			if(saveId!=null) {
				cookie = new Cookie("id", id);
				cookie.setMaxAge(24 * 30 * 60 * 60 * 1000); //30일간 저장
				resp.addCookie(cookie);
				
			}else {
				cookie = new Cookie("id", "");
				cookie.setMaxAge(0);
				resp.addCookie(cookie);
			}//if end
			
			// 홈으로 이동
			mav.setViewName("redirect:/home");
			
		}else {
			// 로그인 실패
			// 결과값을 0으로 지정.
			int result=0;
			// 0 값을 "result"라는 이름으로 사용할 수 있도록 만들어준다.
			session.setAttribute("result", result);
			
			// 실패하면 그대로 로그인 페이지에 남아있도록 링크를 걸어준다.
			mav.setViewName( "redirect:/login.do");
		}//if end
		
		mav.addObject("dto", dto);
		return mav;
		
	}//loginGeneralProc() end
	
	

	// 로그아웃
	@RequestMapping("/logout.do")
	public String logout(HttpSession session) {
		session.invalidate();
		return "redirect:/home";
	}//logout() end



아이디 저장 기능 구현에 도움받은 블로그들

https://smujihoon.tistory.com/93
→ 컨트롤러에 if문으로 로그인 성공/실패와 + 쿠키값까지 같이 저장할 수 있는 조합과 순서를 많이 참고했다.

https://velog.io/@ch4570/Spring-Cookie-Session-%EC%A0%80%EC%9E%A5%EA%B3%BC-%EC%82%AD%EC%A0%9C-%EC%8B%A4%EC%8A%B5
→ jsp에 쿠키값을 아이디 어느부분에 변수지정을 해줘야 하는지, 아이디저장 체크박스엔 어떻게 변수를 넣어줘야하는지 참고했다.

https://jaehoney.tistory.com/68
여기도 전체적으로 잘 설명되어있다.

profile
코딩 공부 💻

0개의 댓글