Spring

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

gkss2tpt 2025. 2. 13. 15:59

1. 게시판 이용시, 미로그인이면 로그인 화면으로 이동

@Controller
@RequestMapping("/board")
public class BoardController {
    @GetMapping("/list")
    public String boardList1(HttpServletRequest request, Model model) throws Exception{
        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;
    }
}

  • 로그인하면 다시 보드로 돌아가게 하려면...
  • Session, Cookie, Model(한 요청만) 선택
@GetMapping("/list")
public String boardList1(HttpServletRequest request, Model model) throws Exception{
    if(!loginCheck(request)){
        HttpSession session = request.getSession();
        session.setAttribute("uri", "board");
        return "redirect:/login/login"; // 로그인을 안했으면 로그인 화면으로 이동
    }

    return "boardList"; // 로그인을 한 상태이면, 게시판 화면으로 이동
}
@PostMapping("/login")
public String login(String id, String pwd, boolean rememberId,
                     HttpServletRequest request, HttpServletResponse response, Model model) 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. 홈으로 이동 uri 체크
    String uri = (String)session.getAttribute("uri");
    if(uri != null && uri.equals("board"))
        return "redirect:/board/list";
     return "redirect:/";
 }
  • 로그인을 하면...

  • Board로 이동한 모습
  •  기본 경로...
@Controller
public class HomeController {
    @RequestMapping(value="/", method= RequestMethod.GET)
    public String IndexA(){ return "indexA"; }

    @RequestMapping("/home")
    public String Home(){ return "indexA"; }

    @RequestMapping("/logout")
    public String Logout(){
        return "logout";
    }

    @RequestMapping("/board")
    public String Board(){
        return "board";
    }
}
  • IndexA의 Mapping은 기본경로로 되어있는데

  • webapp경로에 index.jsp가(제일 아래에 있는 것) 있다면 기본경로로 불러와지는것이 index.jsp이다.
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>index</title>
  </head>
  <body>
  Hello World
  </body>
</html>

  • index.jsp를 삭제하면...

  • 기본경로에서 잘나오는 모습