jsp

[jsp] 8. 로그인 프로그램

jeri 2024. 7. 7. 18:58
반응형
  • 눈에 보이지 않는 것들도 테이블에 저장해야함
  • ex) 마지막로그인날짜
  • ex) 회원상태나 회원등급에 따라 : 휴면계정처리, 삭제계정처리, 일반회원처리, 관리자회원처리
  • 💜session 객체의 핵심 역할
    • 브라우저가 닫히면 기존 세션이 없어지고(로그아웃), 새 세션이 생성되어 연결되므로 다시 로그인 해야함
    • 그래서 세션 속성값으로 권한 관련 정보를 저장한 뒤 필요하면 제공하고, 필요하지 않으면 제공하지 않으면 됨!

01. 로그인 페이지

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)로 이동 --%>

<%
	//1.
	//session 내장객체에 저장된 권한 관련 속성값(아이디)를 반환받아 저장
	String loginId=(String)session.getAttribute("loginId");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>

//1.
<% 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>
//2.
<% } 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>

02. 마이 페이지

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)로 이동 --%>

<%
	//1.
	//session 내장객체에 저장된 권한 관련 속성값(아이디)를 반환받아 저장
	String loginId=(String)session.getAttribute("loginId");
	
	//2.
	//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>

03. 로그인 처리

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 내장객체에 권한 관련 정보를 속성값으로 저장 --%> 
   
<%
	//1.
	//비정상적인 요청에 대한 처리
	if(request.getMethod().equals("GET")) {//JSP 문서를 [GET] 방식으로 요청한 경우
		//session 내장객체에 에러메세지를 속성값으로 저장하고 클라이언트에게 입력페이지의 URL 주소 전달
		session.setAttribute("message", "비정상적인 방법으로 페이지를 요청 하였습니다.");
		response.sendRedirect("login_form.jsp");//입력페이지 이동
		return;	
	}

	//2.
	//전달값을 반환받아 저장
	//=> 아이디와 비번은 한글 없으므로 request.setCharacterEncoding(env)필요없음
	String id=request.getParameter("id");	
	String passwd=request.getParameter("passwd");
	
	//3.
	//아이디와 비밀번호를 비교 - 인증 처리
	//if문을 통해 잘못되었을 때 나가기 - 부정적인 요소의 제거법
	if(!id.equals("abc123") || !passwd.equals("123456")) {//인증 실패
		session.setAttribute("message", "아이디 또는 비밀번호를 잘못 입력 하였습니다.");
		session.setAttribute("id", id);
		response.sendRedirect("login_form.jsp");//입력페이지 이동
		return; //인증 실패
	}
		
	//4.
	//인증 성공
	//session 내장객체에 권한 관련 정보(아이디)를 속성값으로 저장
	//=>클라이언트가 같은 모든 JSP 문서가 아이디 값 다 사용가능
	session.setAttribute("loginId", id);
	response.sendRedirect("login_user.jsp");//출력페이지 이동
%>

04. 로그아웃 처리

logout_action.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
//<%-- 로그아웃 처리 후 클라이언트에게 로그인정보 입력페이지(login_form.jsp)로 이동하기 위한 
//URL 주소를 전달하는 JSP 문서 --%>
//<%-- => 로그아웃 : 권한 관련 정보를 제거하는 작업 --%>    
<%
	//session 내장객체에 저장된 권한 관련 정보(아이디)의 속성값을 삭제
	//session.removeAttribute("loginId");

	//session.invalidate() : 바인딩 세션을 언바인딩 처리하는 메소드 - session 내장객체 제거
	session.invalidate();

	//클라이언트에게 URL 주소 전달 - 원래는 메인페이지로 가도록 만듦
	response.sendRedirect("login_form.jsp");
%>
반응형