[JSP 3-3] 로그인(Login) 관련

임승현·2022년 12월 9일
0

JSP

목록 보기
9/20

🐧Part1

📢 비로그인 사용자: 사용자로부터 로그인정보(아이디와 비밀번호)를 입력받기 위한 JSP 문서
→ [로그인]을 클릭한 경우 form 태그를 실행하여 처리페이지(login_action.jsp)를 [post]방식으로 요청하여 이동 - 인증정보 전달
📢 로그인 사용자 : 클라이언트에게 환영 메세지를 전달하는 JSP 문서
→ [로그아웃]을 클릭한 경우 로그아웃 처리페이지(logout_action.jsp)로 이동
→ [마이페이지]을 클릭한 경우 사용자 출력페이지(login_user.jsp)로 이동

📃login_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 비로그인 사용자: 사용자로부터 로그인정보(아이디와 비밀번호)를 입력받기 위한 JSP 문서 --%>
<%-- → [로그인]을 클릭한 경우 form 태그를 실행하여 처리페이지(login_action.jsp)를 [post]방식으로 요청하여 이동 - 인증정보 전달 --%>
<%-- 로그인 사용자 : 클라이언트에게 환영메세지를 전달하는 JSP 문서 --%>
<%-- => [로그아웃]을 클릭한 경우 로그아웃 처리페이지(logout_action.jsp)로 이동 --%>
<%-- => [마이페이지]을 클릭한 경우 사용자 출력페이지(login_user.jsp)로 이동 --%>
<%
	//비로그인,로그인 사용자 구분하는 코드
	String loginId=(String)session.getAttribute("loginId");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<% if(loginId==null) {//비로그인 사용자가 JSP 문서를 요청한 경우 %>
<%
	//session 내장객체에 저장된 속성값(에러메세지)을 반환받아 저장
	String message=(String)session.getAttribute("message");
	if(message==null) {
		message="";
	} else {
		//다른 JSP 문서에서 session 내장객체에 저장된 속성값(에러메세지)을 사용하지 못하도록 속성값 삭제
		session.removeAttribute("message");
	}
	//session 내장객체에 저장된 속성값(아이디)을 반환받아 저장
	String id=(String)session.getAttribute("id");
	if(id==null) {
		id="";
	} else {
		session.removeAttribute("id");
	}
%>
	<h1>로그인</h1>
	<hr>
	<form action="login_action.jsp" method="post" name="loginForm">
	<table>
		<tr>
			<td>아이디</td>
			<td><input type="text" name="id" value="<%=id%>"></td>
		</tr>
		<tr>
			<td>비밀번호</td>
			<td><input type="password" name="passwd"></td>			
		</tr>
		<tr>
			<td colspan="2"><button type="button" id="loginBtn">로그인</button></td>		
		</tr>
	</table>
	</form>
	<p id="message" style="color: red;"><%=message %></p>
	<%-- --%>
	<script type="text/javascript">
	loginForm.id.focus();
	document.getElementById("loginBtn").onclick=function() {
		if(loginForm.id.value=="") {
			document.getElementById("message").innerHTML="아이디를 입력해 주세요.";
			loginForm.id.focus();
			return;
		}
		if(loginForm.passwd.value=="") {
			document.getElementById("message").innerHTML="비밀번호를 입력해 주세요.";
			loginForm.passwd.focus();
			return;
		}
		loginForm.submit();
	}
	</script>
<% } else {//로그인 사용자가 JSP 문서를 요청한 경우 %>
	<h1>메인페이지</h1>
	<hr>
	<p><%=loginId %>님, 환영합니다.&nbsp;&nbsp;
	<a href="logout_action.jsp">[로그아웃]</a>&nbsp;&nbsp;
	<a href="login_user.jsp">[마이페이지]</a>
<% } %>
</body>
</html>

🐧Part2

📢 로그인정보 입력페이지(login_form.jsp)에서 전달된 로그인 정보를 반환받아 인증 처리하고 처리결과에 따라 다른 요청 URL 주소를 클라이언트에게 전달하는 JSP 문서
→ 로그인(Login) : 인증을 통한 권한 획득 과정
📍 인증 실패 : 클라이언트가 입력페이지(login_form.jsp)로 이동되도록 URL 주소 전달
📍 인증 성공 : 클라이언트가 출력페이지(login_user.jsp)로 이동되도록 URL 주소 전달
→ 로그인처리를 위해 session 내장객체에 권한 관련 정보를 속성값으로 저장

📃login_action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 로그인정보 입력페이지(login_form.jsp)에서 전달된 로그인정보를 반환받아 인증 처리하고 처리결과에 따라 다른 요청 URL 주소를 클라이언트에게 전달하는 JSP 문서 --%>
<%-- → 로그인(Login) : 인증을 통한 권한 획득 과정 --%>
<%-- 인증 실패 : 클라이언트가 입력페이지(login_form.jsp)로 이동되도록 URL 주소 전달 --%>
<%-- 인증 성공 : 클라이언트가 출력페이지(login_user.jsp)로 이동되도록 URL 주소 전달 --%>
<%-- → 로그인처리를 위해 session 내장객체에 권한 관련 정보를 속성값으로 저장 --%>
<%
	//비정상적인 요청에 대한 처리
	if(request.getMethod().equals("GET")) {//JSP 문서를 [GET] 방식으로 요청한 경우
		//session 내장객체에 에러메세지를 속성값으로 저장하고 클라이언트에게 입력페이지의 URL 주소 전달
		session.setAttribute("message", "비정상적인 방법으로 페이지를 요청 하였습니다.");
		response.sendRedirect("login_form.jsp");//입력페이지 이동
		return;
	}
	//전달값을 반환받아 저장
	String id=request.getParameter("id");	
	String passwd=request.getParameter("passwd");
	//
	//아이디와 비밀번호를 비교 - 인증 처리
	if(!id.equals("abc123") || !passwd.equals("123456")) {//인증 실패
		session.setAttribute("message", "아이디 또는 비밀번호를 잘못 입력 하였습니다.");
		session.setAttribute("id", id);
		response.sendRedirect("login_form.jsp");//입력페이지 이동
		return;
	}
	//인증 성공
	//session 내장객체에 권한 관련 정보(아이디)를 속성값으로 저장
	session.setAttribute("loginId", id);
	response.sendRedirect("login_user.jsp");//출력페이지 이동
%>

🐧Part3

📢 로그인 사용자에게 환영메세지를 전달하는 JSP 문서
→ 비로그인 사용자가 JSP 문서를 요청한 경우 로그인 입력페이지(login_form.jsp)로 이동하기 위한 URL 주소 전달 - 비정상적인 요청에 대한 처리
→ [로그아웃]을 클릭한 경우 로그아웃 처리페이지(logout_action.jsp)로 이동
→ [메인으로]을 클릭한 경우 메인페이지(login_form.jsp)로 이동

📃login_user.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 로그인 사용자에게 환영메세지를 전달하는 JSP 문서 --%>
<%-- → 비로그인 사용자가 JSP 문서를 요청한 경우 로그인 입력페이지(login_form.jsp)로 이동하기 위한 URL 주소 전달 - 비정상적인 요청에 대한 처리 --%>
<%-- → [로그아웃]을 클릭한 경우 로그아웃 처리페이지(logout_action.jsp)로 이동 --%>
<%-- → [메인으로]을 클릭한 경우 메인페이지(login_form.jsp)로 이동 --%>
<%
	//session 내장객체에 저장된 권한 관련 속성값(아이디)를 반환받아 저장
	String loginId=(String)session.getAttribute("loginId");
	//
	//session 내장객체에 저장된 권한 관련 속성값이 없는 경우 - 비로그인 사용자인 경우
	if(loginId==null) {//비정상적인 방법으로 JSP 문서를 요청한 경우
		session.setAttribute("message", "로그인 사용자만 접근 가능한 페이지입니다.");
		response.sendRedirect("login_form.jsp");
		return;
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>로그인 사용자 전용 페이지</h1>
	<hr>
	<p><%=loginId %>님, 환영합니다.&nbsp;&nbsp;
	<a href="logout_action.jsp">로그아웃</a>&nbsp;&nbsp;
	<a href="login_form.jsp">메인으로</a>
	</p>
	<hr>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
	<p>로그인 사용자만 확인 가능한 중요한 내용입니다.</p>
</body>
</html>

🐧Part4

📢 로그아웃 처리 후 클라이언트에게 로그인 정보 입력페이지(login_form.jsp)로 이동하기 위한 URL 주소를 전달하는 JSP 문서
→ 로그아웃 : 권한 관련 정보를 제거하는 작업

📃logout_action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 로그아웃 처리 후 클라이언트에게 로그인 정보 입력페이지(login_form.jsp)로 이동하기 위한 URL 주소를 전달하는 JSP 문서 --%>
<%-- → 로그아웃 : 권한 관련 정보를 제거하는 작업 --%>
<%
	//방법1)
	//session 내장객체에 저장된 권한 관련 정보(아이디)의 속성값을 삭제
	//session.removeAttribute("loginId");
	//방법2)
	//↑보다 확실한 방법
	//session.invalidate() : 바인딩 세션을 언바인딩 처리하는 메소드 - session 내장객체 제거
	session.invalidate();
	//
	//클라이언트에게 URL 주소 전달
	response.sendRedirect("login_form.jsp");
	//※보통은 메인페이지로 가지만 메인페이지가 없어서 form으로 이동
%>

0개의 댓글