<๊ฐ์>
๋๋ค์์ ์นํ์ด์ง๊ฐ ํ์์ธ์ง ์๋์ง์ ๋ฐ๋ผ ํ ์ ์๋ ํ๋๋ค์ด ๋๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ ํํ์ด์ง์์๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ ํด์ผ์ง๋ง ๊ฒ์ํ ํ์ด์ง๋ฅผ ์ด์ฉํ ์ ์๋ค๊ณ ํ์.
์ธ์ ๊ฐ์ฒด ์์ id๊ฐ ์ ์ฅ๋์ด ์๋์ง ์๋์ง๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ ํ๋์ง ์ ํ๋์ง๋ฅผ ์ฒดํฌํ ์ ์๋ค.
๋ฐ์ ์ฌ์ง์ ๊ฒ์ํ์ ๋ค์ด๊ฐ๊ธฐ ์ํ ๋ก์ง์ ๋ํ๋ธ ๊ฒ์ด๋ค.
1. BoardController์ boardList ๋ง๋ค๊ธฐ
์ฐ๋ฆฌ๋ ์ง๊ธ๊น์ง ๋ก๊ทธ์ธ ํ๋ฉด(loginForm.jsp)๊ณผ ๋ก๊ทธ์ธ ํ ๋ค์ด์ฌ ์ ์๋ ํ ํ๋ฉด(index.jsp) 2๊ฐ์ง๋ฅผ ๋ง๋ค์๋ค.
index.jsp๋ฅผ ์ดํด๋ณด๋ฉด,
<!--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 HOME</h1>
<h1>This is HOME</h1>
<h1>This is HOME</h1>
</div>
์์ ๊ฐ์ด list ํ๊ทธ์ a ํ๊ทธ๋ก ๊ฒ์ํ ํ๋ฉด, ๋ก๊ทธ์ธ ํ๋ฉด, ํ์๊ฐ์ ํ๋ฉด์ผ๋ก ๊ฐ ์ ์๋ ๋ฒํผ์ ๋ง๋ค์ด ๋์๋ค.
์ฐ๋ฆฌ๋ ์์ง ๊ฒ์ํ ํ์ด์ง์ ๊ทธ๊ฑธ ํต์ ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ๊ตฌํ ํด์ค์ผ ํ๋ค.
์๋ฅผ ๋ณด๋ฉด Board๋ฅผ ํด๋ฆญ ํ์ ์, /board/list ๋ผ๋ URL๋ก ๊ฐ๊ฒ ๋์ด์๋ค. ์กฐํ๋ง ํ๋ฏ๋ก GET ์์ฒญ์ด๋ค.
ํด๋น ์์ฒญ์ ๋์ํ ์ ์๋ Controller๋ฅผ ๋ง๋ค๊ฒ ๋ค.
@Controller
@RequestMapping("/board")
public class BoardController {
//1. /board/list mapping
@GetMapping("/list")
public String list(HttpServletRequest request) {
//2. ๋ก๊ทธ์ธ์ฒดํฌ - ์ํ์ผ๋ฉด loginform์ผ๋ก redirect,
// ํ์ผ๋ฉด ๊ฒ์ํ JSP View ๋ณด์ฌ์ฃผ๊ธฐ
if(!loginCheck(request))
{
return "redirect:/login/login"; // ๋ก๊ทธ์ธ์ ์ ํ์ผ๋ฉด ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋
}
return "boardList"; // ๋ก๊ทธ์ธ ํ ์ํ์ด๋ฉด, ๊ฒ์ํ ํ๋ฉด์ผ๋ก ์ด๋
}
//3. ๋ก๊ทธ์ธ ์ฒดํฌํ๋ ๋งค์๋ ๊ตฌํ
// request์ ์ ํ ์๋ Session id๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ์ธ์
๊ฐ์ฒด๋ฅผ ์ฐพ์ ๋งตํ
// ๊ทธ ์ธ์
๊ฐ์ฒด์์ id ๊ฐ์ด ์๋์ง ํ์ธ. ์์ผ๋ฉด ๋ก๊ทธ์ธ ์ํ ๊ฒ, ์์ผ๋ฉด ๋ก๊ทธ์ธ ํ ๊ฒ.
private boolean loginCheck(HttpServletRequest request) {
// ์ธ์
์ ์ป์ด์
HttpSession session = request.getSession();
// ์ธ์
์ id๊ฐ ์๋์ง ํ์ธ, ์์ผ๋ฉด true๋ฅผ ๋ฐํ
// getAtrribute("name")์ name์ value๋ฅผ ๋ฐํ
return session.getAttribute("id")!=null;
//** ์ด ๊ณผ์ ์ ๋ฐํ ๊ฐ์ผ๋ก ํ๋ฒ์ ๋ํ๋ด๋ฉด ์์ฒ๋ผ ๋๋ค.
// if(session.getAttribute("id")!=null)
// return true;
// else
// return false;
}
}
๋ก๊ทธ์ธ ํ ์ํ์ด๋ฉด ๊ฒ์ํ view๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋๋ฐ ์์ง view๋ฅผ ์ ๋ง๋ค์๋ค. ๋ง๋ค์ด ๋ณด์.
<%@ 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='/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>
์์ง ๋ญ ๋ด์ฉ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ ๋ค๋ฅผ๊ฒ ์๋ค.
์ฌ๊ธฐ์๋ ํ๋ฉด ์๋จ์ ๋ชฉ๋ก์ ์ฌ์ ํ ์๋ํด์ผํด์ ํด๋น ๋ด์ฉ์ ๋๊ฐ์ด ๋ฃ์๋ค.
** ์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ๋ก๊ทธ์ธ์ ์ ํ์ ์ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ๋์๊ฐ๋ค.
ํ์ง๋ง ๋ก๊ทธ์ธ์ ํ ๊ฒฝ์ฐ์๋ ๋ก๊ทธ์ธ์ผ๋ก ๋์๊ฐ๋ค. ๊ทธ ์ด์ ๋ Login์ ๋ด๋นํ๋ Controller์์ ๋ก๊ทธ์ธ ์ ํด๋น id๋ฅผ ์ธ์ ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ์์ง ๋ฃ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ์์ ๊ทธ๊ฒ์ ๊ตฌํํด๋ณด์.
2.Login ํ์ ์ Session์ Id ์ ์ฅํ๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
public class LoginController {
//์กฐํ๋ง ํ ์์ ๋ก๊ทธ์ธ ์
๋ ฅ์ฐฝ์ ๋ณด์ฌ์ค๋ผ
@GetMapping("/login")
public String loginform() {
return "loginForm";
}
// ๋ด์ฉ์ ์ฐ๊ณ ๋ก๊ทธ์ธ ์์ฒญ(POST)๋ฅผ ํ์์,
@PostMapping("/login")
//** ์ธ์
์ ๋ณด๋ request ์์ ์์ผ๋ฏ๋ก request๋ ๋ฐ์์ผํจ.
public String login(String id, String pwd, boolean rememberId, HttpServletRequest request ,HttpServletResponse response ) throws Exception {
// 1. id์ pwd๋ฅผ ํ์ธ
if(!loginCheck(id,pwd)) {
String msg = URLEncoder.encode("id ํน์ ํจ์ค์๋๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค.", "utf-8");
// 2-1 ์ผ์นํ์ง ์์ผ๋ฉด loginform ์ผ๋ก redirect, ์คํธ๋ง ์ฟผ๋ฆฌ๋ก ํ๋ฉด์ ๋ณด์ผ ๋ฉ์ธ์ง๋ ๊ฐ์ด ๋ณด๋.
return "redirect:/login/login?msg="+msg;
}
// 2-2 id์ pwd๊ฐ ์ผ์นํ๋ฉด ์ธ์
๊ฐ์ฒด ์ป์ด์์ ๊ทธ ์์ id๋ฅผ ์ ์ฅ.
// ์ธ์
๊ฐ์ฒด ์ป์ด์ค๊ธฐ
HttpSession session = request.getSession();
// ์ธ์
๊ฐ์ฒด์ id๋ฅผ ์ ์ฅ
session.setAttribute("id", id);
if(rememberId) {
// 1. ์ฟ ํค๋ฅผ ์์ฑ
Cookie cookie = new Cookie("id", id);
// 2. ์๋ต์ ์ ์ฅ
response.addCookie(cookie);
}else {
// 1. ์ฟ ํค๋ฅผ ์ญ์
Cookie cookie = new Cookie("id", id );
cookie.setMaxAge(0);
// 2. ์๋ต์ ์ ์ฅ
response.addCookie(cookie);
}
// 3. ํ์ผ๋ก ์ด๋
return "redirect:/";
}
3. logout ํ ์ ์๋ ํ๊ฒฝ ๋ง๋ค๊ณ , ๊ฒ์ํ ํ์ด์ง๋ ํ ํ์ด์ง์์ ๋ก๊ทธ์์ ํ์ ๋, ๋ค์ ๋ก๊ทธ์ธ ์ํ๋ฉด ๊ฒ์ํ ์ด์ฉ ๋ชปํ๊ฒ ๋ง๋ค๊ธฐ.
์์ ๊ฐ์ด ๋ง๋ค๋ฉด ์์ ์ค๊ณ๋ ๋ก์ง๋๋ก ์๋ํ๋ค.
ํ์ง๋ง, ๋ด๊ฐ ๋ก๊ทธ์ธ์ ํ ์ํ์ธ์ง ๋ก๊ทธ์ธ์ ์ ํ ์ํ์ธ์ง ๋ถ๊ฐ์ด ์๊ฐ๋ค.
๋ฐ๋ผ์ ๋ก๊ทธ์ธ์ ํ๋ค๋ฉด ๊ทธ ํ ํํ์ด์ง ์๋จ ๋ก๊ทธ์ธ ๋ฒํผ์ด ๋ก๊ทธ์์ ๋ฒํผ์ผ๋ก ๋ฐ๋๊ณ ,
๋ก๊ทธ์์์ ํ๋ค๋ฉด ํด๋น ๋ฒํผ์ด ๋ค์ ๋ก๊ทธ์์์ผ๋ก ๋์์ค๋ฉด ์ข๊ฒ ๋ค.
์ด๋ฅผ ์ํด์๋ ๋จผ์ Controller์์ logout์ ํ๋ ค ํ ๋ ๋์ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ง๋ค์ด์ผ ํ๋ค.
๊ทธ ๋ค์ ํด๋น ์ปจํธ๋กค๋ฌ๊ฐ ์ฌ์ฉํ ์ ์๋ View๋ ๋ง๋ค์ด์ผ ํ๋ค.
(1) Login Controller์ Logout ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ.
public class LoginController {
//์กฐํ๋ง ํ ์์ ๋ก๊ทธ์ธ ์
๋ ฅ์ฐฝ์ ๋ณด์ฌ์ค๋ผ
@GetMapping("/login")
public String loginform() {
return "loginForm";
}
//๋ก๊ทธ์์ ์ ์ธ์
์ข
๋ฃํ๊ณ ํ ํ๋ฉด์ผ๋ก URL ์ฌ์กฐ์
@GetMapping("/logout")
public String logout(HttpSession session) {
// 1. ์ธ์
์ ์ข
๋ฃ
session.invalidate();
// 2. ํ์ผ๋ก ์ด๋
return "redirect:/";
}
/...
}
(2) ์ด์ ๋ง๊ฒ index.jsp, boardList.jsp ๊ณ ์น๊ธฐ
jsp ๋ด์ ๋ณ์๋ฅผ ๋ง๋ค์ด ํด๋น ๋ณ์์ ๊ฐ์ ์ผํญ ์ฐ์ฐ์๋ก, ์ธ์ ์ id ์์ผ๋ฉด login ๊ธ์ ๋์ฐ๊ธฐ, ์์ผ๋ฉด logout ๊ธ์ ๋์ฐ๊ธฐ๋ก ์ฒด์ธ์ง
<!-- ๋ณ์ ๋ง๋ค๊ณ ์ผํญ ์ฐ์ฐ์๋ฅผ ํตํด ์ธ์
์ id ์์ผ๋ฉด login ์์ผ๋ฉด logout ๊ธ์์ ๋งํฌ ๋์ฐ๋๋ก ๋ง๋ ๋ค.
๋งํฌ์ ๊ธ์ ๊ฐ๊ฐ ๋ณ์ ํ๋์ฉ ํ์ -->
<c:set var = "loginOutLink" value = "${sessionScope.id == null ? '/login/login' : '/login/logout'}"/>
<c:set var = "loginOut" value = "${sessionScope.id == null ? 'Login' : 'Logout'}"/>
<!--... ๋ฆฌ์คํธ ํ๊ทธ์ ๋ก๊ทธ์ธ ๋ชฉ๋ก ๋ฐ๊ณผ ๊ฐ์ด ๋ฐ๊พธ๊ธฐ
${๋ณ์์ด๋ฆ}์ ํด๋น ๋ณ์์ ๊ฐ์ ๋ํ๋ธ๋ค.-->
<li><a href="<c:url value='${loginOutLink }'/>">${loginOut}</a></li>
index.jsp , boardlist.jsp ๋ ๋ค ์ด๋ ๊ฒ ๊ณ ์น๋ฉด ๋๋ค.
4. ์ง์ ํด๋ณด๊ธฐ
(1) 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 = "loginLogOutLink" 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='/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='${loginLogOutLink}'/>">${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>
${๊น์ง ์น๋ฉด }๊ฐ ์ ์ ๋ก ์ณ์ง๋ค๋ ๊ฒ์ ์ธ์งํ์. ๋งํฌ ๋ถ๋ถ์ }}์ด๋ ๊ฒ ๋๋ฒ ์ณ์ ธ์ ๊ฒฝ๋ก ์ค๋ฅ๊ฐ ๋์ ํค๋งธ๋ค.
(2) boardController ์ฃผ์๋ณด๊ณ ์จ๋ณด๊ธฐ
package com.fastcampus.ch2;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/board")
public class BoardController{
//1. /board/list mapping
@GetMapping("/list")
public String list(HttpServletRequest request) {
//2. ๋ก๊ทธ์ธ์ฒดํฌ - ์ํ์ผ๋ฉด ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋,
// ํ์ผ๋ฉด ๊ฒ์ํ JSP View ๋ณด์ฌ์ฃผ๊ธฐ
if(!(logincheck(request))) {
return "redirect:/login/login";
}
return "boardList";
}
//3. ๋ก๊ทธ์ธ ์ฒดํฌํ๋ ๋งค์๋ ๊ตฌํ
// request์ ์ ํ ์๋ Session id๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ์ธ์
๊ฐ์ฒด๋ฅผ ์ฐพ์ ๋งตํ
// ๊ทธ ์ธ์
๊ฐ์ฒด์์ id ๊ฐ์ด ์๋์ง ํ์ธ. ์์ผ๋ฉด ๋ก๊ทธ์ธ ์ํ ๊ฒ, ์์ผ๋ฉด ๋ก๊ทธ์ธ ํ ๊ฒ.
private boolean logincheck(HttpServletRequest request) {
// ์ธ์
์ ์ป์ด์
HttpSession session = request.getSession();
// ์ธ์
์ id๊ฐ ์๋์ง ํ์ธ, ์์ผ๋ฉด true๋ฅผ ๋ฐํ
return session.getAttribute("id") != null;
}
}
//** ์ด ๊ณผ์ ์ ๋ฐํ ๊ฐ์ผ๋ก ํ๋ฒ์ ๋ํ๋ด๋ฉด ์์ฒ๋ผ ๋๋ค.
// if(session.getAttribute("id")!=null)
// return true;
// else
// return false;
redirect์ ๋งํฌ ์ฌ์ด์ ๋์ด์ฐ๊ธฐ๊ฐ ์์ด์๋ ์๋๋๋ค.
(3) Logout ๋ถ๋ถ ์ฃผ์๋ง ๋ณด๊ณ ์ค์ค๋ก ์ถ๊ฐ
//๋ก๊ทธ์์ ์ ์ธ์
์ข
๋ฃํ๊ณ ํ ํ๋ฉด์ผ๋ก URL ์ฌ์กฐ์
@GetMapping("/logout")
public String logout(HttpSession session) {
// 1. ์ธ์
์ ์ข
๋ฃ
session.invalidate();
// 2. ํ์ผ๋ก ์ด๋
return "redirect:/";
}
redirect๋ฅผ ๋ถ์ด๋ ์ด์
์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ถ์ด๋ฉด ์ปจํธ๋กค๋ฌ๋ "/"๋ผ๋ jsp view๋ฅผ ์ฐพ๋๋ค.
view๊ฐ ์๋๋ผ ํด๋น ๊ฒฝ๋ก๋ก ๊ฐ๋ผ๊ณ ๋ช ๋ นํ๊ณ ์ถ์ผ๋ฉด redirect: ๋ฅผ ๋ถ์ฌ์ผ ํ๋ค.