WebServer/JSP&Servlet

[JSP&Servlet] 세션을 활용한 간단한 로그인&로그아웃

gangintheremark 2023. 8. 21. 16:59
728x90

세션(Session)이란?

  • 클라이언트가 서버에 정보를 요청할 때 생성되는 상태정보
  • 서버에 데이터를 저장

LoginForm

LoginServlet.java

package com.controller;

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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 로그인 폼에서 전송되는 아이디와 비밀번호 읽어오기
        String userid = request.getParameter("userid");
        String passwd = request.getParameter("passwd");

        // 2. DB에서 회원의 아이디 및 비밀번호 일치 여부 확인 (인증되었다고 가정)

        // 3. 세션 얻기 
        HttpSession session = request.getSession();

        // 4. 세션에 로그인 정보 저장
        session.setAttribute("user", userid);

        // 5. 로그인 성공 후 응답처리 
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
         out.print("<html><head>");
         out.print("<meta charset=\"UTF-8\">");
         out.print("<title>Insert title here</title>");
         out.print("</head>");
         out.print("<body>");

         out.print("<h1>로그인성공</h1>");         
         out.print("안녕하세요. " + userid +"님<br>");         
         out.print("<form action='logout' method='get'>");
         out.print("<input type='submit' value='로그아웃'></form>");

         out.print("</body></html>");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        doGet(request, response);
    }
}

MyPageServlet.java

package com.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@WebServlet("/mypage")
public class MyPageServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 세션 얻기
        HttpSession session = request.getSession();

        // 세션의 로그인 정보 얻기
        String id = (String)session.getAttribute("user");

        if(id != null) {
            // 로그인 한 경우로서 응답처리
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
             out.print("<html><head>");
             out.print("<meta charset=\"UTF-8\">");
             out.print("<title>Insert title here</title>");
             out.print("</head>");
             out.print("<body>");
             out.print("<h1>mypage</h1>");         
             out.print("안녕하세요. " + id +"님<br>");         
             out.print("<form action='logout' method='get'>");
             out.print("<input type='submit' value='로그아웃'></form>");         

             out.print("</body></html>");
        }else {
            // id값이 null이면 로그인을 안한 경우 또는 했는데 time-out 
            response.sendRedirect("LoginForm.html");
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

LogoutServlet.java

package com.controller;

@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 세션 얻기
        HttpSession session = request.getSession();

        // 세션 영역 제거 (로그아웃)
        session.invalidate();

        response.sendRedirect("LoginForm.html");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

728x90