[Web] 세션을 이용한 로그인 정보 바인딩하기

2024. 8. 19. 21:11자바 웹 개발/세션 쿠키 필터 리스너

톰캣이 종료되어도 세션이 메모리에서 삭제되지 않는 경우가 있어서 다음과 같이 설정을 해주어야 한다. 

<Manager pathnam="" /> 주석을 해제한다. 

login2.html 파일을 작성한다. 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form name="frmLogin" method="post" action="login" encType="UTF-8">
		아이디 :<input type="text" name="user_id"><br>
		비밀번호 :<input type="password" name="user_pw"><br>
		<input type="submit" value="로그인">
		<input type="reset" value="다시 입력">  
	</form>
</body>
</html>

 

setAttribute() 메서드를 이용해 user_id로 사용자 ID를 바인딩하도록 구현한다. 톰캣을 껐다가 다시 키지 않는한 session이 저장된 user_id대로 로그인 정보가 남아있다. 

@WebServlet("/login")
public class SessionTest4 extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doHandle(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doHandle(req, resp);
	}
	
	private void doHandle(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		HttpSession session = req.getSession();
		String user_id = req.getParameter("user_id");
		String user_pw = req.getParameter("user_pw");
		if(session.isNew()) {
			if(user_id != null) {
				session.setAttribute("user_id", user_id);
				out.print("<a href='login'>로그인 상태 확인</a>");
			} else {
				out.print("<a href='login2.html'>다시 로그인 하세요!!</a>");
				session.invalidate();
			}
		} else {
			user_id = (String) session.getAttribute("user_id");
			if(user_id != null && user_id.length() != 0) {
				out.print("안녕하세요 " + user_id + "님!!!");
			} else {
				out.print("<a href='login2.html'>다시 로그인 하세요!!</a>");
				session.invalidate();
			}
			
		}
	}
}