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를 삭제하면...
- 기본경로에서 잘나오는 모습