• HttpSession 객체
    • void setAttribute(String name, Object value);
    • Object getAttribute(String name);
    • 위 두 메소드를 활용해서 값을 저장 및 조회할 수 있다.

login.jsp

<%@page import="org.apache.commons.codec.digest.DigestUtils"%>
<%@page import="com.sample.board.vo.User"%>
<%@page import="com.sample.board.dao.UserDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	// loginform.jsp에서 제출한 입력값을 조회한다
	String id = request.getParameter("id");
	String password = request.getParameter("password");
	
	// 사용자 인증에 필요한 사용자 정보를 조회하기 위해 UserDao 객체를 획득하고,
	UserDao userDao = UserDao.getInstance();
	
	// 아이디로 사용자 정보를 조회한다.
	User user = userDao.getUserById(id);
	
	if (user == null) { // id에 해당하는 회원정보가 존재하지 않을 때
		response.sendRedirect("loginform.jsp?fail=id");
		return;
	}
	
	// 비밀번호 비교를 위해서 로그인폼에서 제출한 비밀번호를 암호화한다.
	String secretPassword = DigestUtils.sha256Hex(password);
	
	if (!user.getPassword().equals(secretPassword)) { // 비밀번호가 일치하지 않을 때
		response.sendRedirect("loginform.jsp?fail=pwd");
		return;
	}
	
	...
	
	// 회원정보가 존재하고, 비밀번호가 일치할 때
	// 사용자 인증이 완료되면 사용자 정보를 로그인을 요청한 클라이언트의 전용 HttpSession 객체에 속성으로 저장시킨다.
	session.setAttribute("LOGIN_USER_INFO", user);
	
	response.sendRedirect("index.jsp");
%>

index.jsp

<%@page import="com.sample.board.vo.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!doctype html>
<html lang="ko">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" >
   <title>커뮤니티 게시판</title>
</head>
<body>
<%
	pageContext.setAttribute("menu", "home");
%>
<%@include file="common/navbar.jsp"%>
<div class="container">    
<div class="row mb-3">
	<div class="col">
		<div class="p-5 mb-4 bg-light rounded-3">
            <div class="container-fluid py-5">
               <h1 class="disply-5 fw-bold">커뮤니티 게시판</h1>
               <p class="fs-4">커뮤니티에서 글을 게시하고, 공유해보세요</p>
<%
	// getAttribute 객체는 항상 Object를 반환하기 때문에 형변환이 필요하다
	User user = (User)session.getAttribute("LOGIN_USER_INFO");
	if (user == null) {
%>
               <div>
                  <a href="loginform.jsp" class="btn btn-primary btn-lg">로그인</a>
                  <a href="registerform.jsp" class="btn btn-primary btn-lg">회원가입</a>
               </div>
<%
	} else {
%>
				<div class="mt-3">
                  <p class="fs-4"><strong class="text-primary"><%=user.getName() %></strong> 환영합니다</p>
                  <p class="fs-4">다양한 게시글을 확인해 보세요!</p>
               </div>
<%
	}
%>
            </div>
         </div>
      </div>
    </div>

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	// 로그아웃은 인증된 사용자정보가 저장된 HttpSession객체를 폐기하는 것이다.
	// HttpSession객체의 invalidate() 메소드는 HttpSession객체를 폐기한다.
	// session.invalidate()를 실행하면 사용자정보(User객체)가 저장된 HttSession 객체가 폐기된다.
	// 즉, 서버에 로그아웃을 요청한 클라이언트 전용의 HttpSession객체가 사라진 것이다.
	session.invalidate();

	// 클라이언트에 index.jsp를 재요청하게 하는 응답을 보낸다.
	// 이 응답을 받은 클라이언트가 index.jsp를 재요청하면 웹서버는 HttpSession객체를 새로 생성한다.
	// 새로 생성한 HttpSession객체에는 인증된 사용자 정보가 존재하지 않는다.
	response.sendRedirect("index.jsp");
%>