2024-02-02(40일차) - Spring

민짱·2024년 2월 2일

📅2024. 02.02 40일차


🎬2024_01_Spring_AM

Login 폼 구현 + 로그인 처리

💡띵킹 타임💡

  • 현재는 url 상태에서만 로그인 가능 이걸 로그인 폼을 만들어 로그인 처리 해야함.
  • 어떻게??? login.jsp를 일단 만들자
<script type="text/javascript">
		var LoginForm__submitDone = false;

		function LoginForm__submit(form) {
			if (LoginForm__submitDone) {
				alert('이미 처리중입니다');
				return;
			}
			var loginId = form.loginId.value.trim();
			var loginPw = form.loginPw.value.trim();

			console.log('form.loginId.value : ' + loginId);
			console.log('form.loginPw.value : ' + loginPw);

			if (loginId.length == 0) {
				alert('아이디를 입력해주세요');
				form.loginId.focus();
				return;
			}
			if (loginPw.length == 0) {
				alert('비밀번호를 입력해주세요');
				form.loginPw.focus();
				return;
			}

			LoginForm__submitDone = true;
			form.submit();

		}
	</script>

	<form method="POST" action="doLogin"
		onsubmit="LoginForm__submit(this); return false;">
		<div>
			로그인 아이디 : <input autocomplete="off" type="text"
				placeholder="아이디를 입력해주세요" name="loginId" />
		</div>
		<div>
			로그인 비밀번호 : <input autocomplete="off" type="text"
				placeholder="비밀번호를 입력해주세요" name="loginPw" />
		</div>

		<button type="submit">로그인</button>
	</form>


	<div>
		<a style="color: green" href="../article/list">리스트로 돌아가기</a>
	</div>
  • jsp 파일은 만들었다. 근데 지금 loing.jsp파일로 이동시키게 하질 못하는데?? jsp로 넘길 수 있는 login 메소드 만들자.

	@RequestMapping("/usr/member/login")
	public String showlogin(HttpServletRequest req) {

		return "usr/member/login"; 
	}

문제 해결

  • 로그인 폼으로 구현 완성 로그인 시 doLogin 실행되서 로그인 됨

문제점

  • 로그인 후 계속 로그인 창이다. 로그인 완료 시 홈이나 리스트 창으로 보내야할듯??
@RequestMapping("/usr/member/doLogin")
	@ResponseBody
	public String doLogin(HttpSession httpSession, String loginId, String loginPw) {

		boolean isLogined = false;

		if (httpSession.getAttribute("loginedMemberId") != null) {
			isLogined = true;
		}

		if (isLogined) {
			return Ut.jsReplace("F-A", "이미 로그인 상태입니다.", "/");
		}

		if (Ut.isNullOrEmpty(loginId)) {
			return Ut.jsReplace("F-1", "아이디를 입력해주세요.");
		}
		if (Ut.isNullOrEmpty(loginPw)) {
			return Ut.jsReplace("F-2", "비밀번호를 입력해주세요.");
		}

		Member member = memberService.getMemberByLoginId(loginId);

		if (member == null) {
			return Ut.jsReplace("F-3", Ut.f("%s(은)는 존재하지 않는 아이디입니다", loginId),"../member/login");
		}

		if (member.getLoginPw().equals(loginPw) == false) {
			return Ut.jsReplace("F-4", "비밀번호가 일치하지 않습니다.","../member/login");		
		}

		httpSession.setAttribute("loginedMemberId", member.getId());
		
		return Ut.jsReplace("S-1", Ut.f("%s님 환영합니다", member.getNickname()), "../article/list");
	}
public static String jsReplace(String resultCode, String msg) {
		if (resultCode == null) {
			resultCode = "";
		}
		if (msg == null) {
			msg = "";
		}

		String resultMsg = resultCode + " / " + msg;

		return Ut.f("""
				<script>
					const resultMsg = '%s'.trim();
					if(resultMsg.length > 0){
						alert(resultMsg);
					}
				</script>
				""", resultMsg);
	}
}

문제점

  • 로그인 상태여도 홈 상단에 로그인이 뜬다.

문제 해결

  • 로그인 상태에서는 로그아웃으로 상단에 표시되고 로그아웃 상태에서는 로그인이 상단에 뜨게 만들자.

💡띵킹 타임💡

  • head.jspf 파일 쪽의 로그인, 로그아웃 a 태그에 조건 걸면 끝 날 듯??? 로그인아이디 정보는 rq에 저장해놨으니 불러오면 됨

0개의 댓글