반응형
- 눈에 보이지 않는 것들도 테이블에 저장해야함
- 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 %>님, 환영합니다.
<a href="logout_action.jsp">[로그아웃]</a>
<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 %>님, 환영합니다.
<a href="logout_action.jsp">[로그아웃]</a>
<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");
%>
반응형
'jsp' 카테고리의 다른 글
[jsp] 10. include 액션태그를 이용한 프로그램 (실행결과물만 가지고 원래 파일로 이동) (0) | 2024.07.09 |
---|---|
[jsp] 9. JSP 모델 1 VS JSP 모델 2 (0) | 2024.07.08 |
[jsp] 7. 회원가입 프로그램 (0) | 2024.07.07 |
[jsp] 6. JSP 내장객체의 사용범위(Scope) (0) | 2024.07.06 |
[jsp] 5. JSP 내장객체 (0) | 2024.07.05 |