Spring

30. 세션(session)/실습(1) - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 10. 19:07

1. boardList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>fastcampus</title>
  <link rel="stylesheet" href="<c:url value='/resources/css/menu.css'/>">
</head>
<body>
<div id="menu">
  <ul>
    <li id="logo">fastcampus</li>
    <li><a href="<c:url value='/'/>">Home</a></li>
    <li><a href="<c:url value='/board/list'/>">Board</a></li>
    <li><a href="<c:url value='/login/login'/>">login</a></li>
    <li><a href="<c:url value='/register/add'/>">Sign in</a></li>
    <li><a href=""><i class="fas fa-search small"></i></a></li>
  </ul>
</div><div style="text-align:center">
  <h1>This is BOARD</h1>
  <h1>This is BOARD</h1>
  <h1>This is BOARD</h1>
  <h1>This is BOARD</h1>
  <h1>This is BOARD</h1>
</div>
</body>
</html>
  • BoardController
@Controller
@RequestMapping("/board")
public class BoardController {
    @GetMapping("/list")
    public String list(){
        return "boardList";
    }
}
  • Board를 누르면 이 페이지로 오게된다.

  • 이 페이지를 로그인이 안되어있으면 오지 못하게 해보자
  • BoardController
@Controller
@RequestMapping("/board")
public class BoardController {
    @GetMapping("/list")
    public String list(HttpServletRequest request){
        if(!loginCheck(request))
            return "redirect:/login/login"; // 로그인을 안했으면 로그인 화면으로 이동

        return "boardList"; // 로그인을 한 상태이면, 게시판 화면으로 이동
    }

    private boolean loginCheck(HttpServletRequest request) {
        // 1. 세션을 얻어서
        HttpSession session = request.getSession();
        // 2. 세션에 id가 있는지 확인, 있으면 true를 반환
        return session.getAttribute("id")!=null;
    }
}

 

 

  • 아직 세션에 id저장을 안해줬다.
  • LoginController
@Controller
@RequestMapping("/login")
public class LoginController {
    @GetMapping("/login")
    public String loginForm(){
        return "loginForm";
    }

    @PostMapping("/login")
    public String login(String id, String pwd, boolean rememberId,
                        HttpServletRequest request, HttpServletResponse response) throws Exception{
        System.out.println("id="+id);
        System.out.println("pwd="+pwd);
        System.out.println("rememberId="+rememberId);
        // 1. id와 pwd를 확인
        if(!loginCheck(id, pwd)) {
            String msg = URLEncoder.encode("id 또는 pwd가 일치하지 않습니다.", "UTF-8");
            // 2-1. 일치하지 않으면, loginForm으로 이동
            return "redirect:/login/login?msg="+msg;
        }


        // 2-2. id와 pwd가 일치하면
        // 세션 객체를 얻어오기
        HttpSession session = request.getSession();
        // 세션 객체에 id를 저장
        session.setAttribute("id", id);


        // 체크박스가 true이면
        if(rememberId){
            // 쿠키를 생성
            // 1. 쿠키를 생성
            Cookie cookie = new Cookie("id", id);
            // 2. 응답에 저장
            response.addCookie(cookie);
        } else{
            // 쿠키를 삭제
            Cookie cookie = new Cookie("id", id);
            cookie.setMaxAge(0);
            response.addCookie(cookie);
        }

        // 3. 홈으로 이동
        return "redirect:/";
    }

    private boolean loginCheck(String id, String pwd) {
        return "asdf".equals(id) && "1234".equals(pwd);
    }
}
  • 로그인 후 Board로 잘 가진다.

  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="loginOutLink" value="${sessionScope.id==null ? '/login/login' : 'login/logout'}"/>
<c:set var="loginOut" value="${sessionScope.id==null ? 'Login' : 'Logout'}"/>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>fastcampus</title>
    <link rel="stylesheet" href="<c:url value='/resources/css/menu.css'/>">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.min.css"/>
</head>
<body>
<div id="menu">
    <ul>
        <li id="logo">fastcampus</li>
        <li><a href="<c:url value='/'/>">Home</a></li>
        <li><a href="<c:url value='/board/list'/>">Board</a></li>
        <li><a href="<c:url value='${loginOutLink}'/>">${loginOut}</a></li>
        <li><a href="<c:url value='/register/add'/>">Sign in</a></li>
        <li><a href=""><i class="fas fa-search small"></i></a></li>
    </ul>
</div>
<div style="text-align:center">
    <h1>This is HOME</h1>
    <h1>This is HOME</h1>
    <h1>This is HOME</h1>
</div>

 

  • 로그인을 하면...

  • boardList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="loginOut" value="${sessionScope.id==null ? 'Login' : 'Logout'}"/>
<c:set var="loginOutLink" value="${sessionScope.id==null ? '/login/login' : 'login/logout'}"/>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>fastcampus</title>
  <link rel="stylesheet" href="<c:url value='/resources/css/menu.css'/>">
</head>
<body>
<div id="menu">
  <ul>
    <li id="logo">fastcampus</li>
    <li><a href="<c:url value='/'/>">Home</a></li>
    <li><a href="<c:url value='/board/list'/>">Board</a></li>
    <li><a href="<c:url value='${loginOutLink}'/>">${loginOut}</a></li>
    <li><a href="<c:url value='/register/add'/>">Sign in</a></li>
    <li><a href=""><i class="fas fa-search small"></i></a></li>
  </ul>
</div><div style="text-align:center">
  <h1>This is BOARD</h1>
  <h1>This is BOARD</h1>
  <h1>This is BOARD</h1>
  <h1>This is BOARD</h1>
  <h1>This is BOARD</h1>
</div>
</body>
</html>

  • Board탭에서도 잘 나오는 모습