본문 바로가기

SpringBoot

SpringBoot(7) - Session 예제(login, logout, login 시 메뉴)

728x90
반응형

1) SpringBoot

   1-1) Session 예제(login, logout, login 시 메뉴)

 

 

 

 

 

1) SpringBoot

1-1) Session 예제(login, logout, login 시 메뉴)

(1) [src/main/resources] - [templates] 안에 home.html 파일 생성 후 아래와 같이 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>web2</title>
</head>
<body>
	<h1>[ web2 ]</h1>
	<ol>
		<li>Lombok & Logger 사용
			<ul>
				<li>
					<a href="lom/lombok">Lombok 사용하기</a>
				</li>
				<li>
					<a href="lom/logger">Logger 사용하기</a>
				</li>
				<!--
				여기는 메인화면입니다. 위의 l은 소문자 L입니다.
				글꼴 때문에 꼬부라져 보이는 것입니다.
				-->
			</ul>
		</li>
		<li>서버로 데이터 보내기/받기
			<ul>
				<li>
					<a href="param/view1">GET 방식으로 보내기</a>
				</li>
				<li>
					<a href="param/view2">POST 방식으로 보내기</a>
				</li>
				<li>
					<a href="param/model">Model 객체 이용하기</a>
				</li>
			</ul>
		</li>
		<li> 예제
			<ul>
				<li>
					<a href="ex/calc1">계산기</a>
				</li>
				<li>
					<a href="ex/calc2">계산기2</a>
				</li>
			</ul>
		</li>
		<li> 세션 사용
			<ul>
				<li>
					<a href="ss/session1">세션에 값 저장</a>
				</li>
				<li>
					<a href="ss/session2">세션에서 값 읽기</a>
				</li>
				<li>
					<a href="ss/session3">세션의 값 삭제</a>
				</li>
				
				<li>
					<a href="ss/login">로그인</a>
				</li>
				<li>
					<a href="ss/logout">로그아웃</a>
				</li>
				<li>
					<a href="ss/loginTest">로그인해야 들어갈 수 있는 메뉴</a>
				</li>
			</ul>
		</li>
	</ol>
</body>
</html>

 

 

(2) [src/main/java] - [net.datasa.web2.controller] 안에 SessionController.java 파일 생성 후 아래와 같이 작성

package net.datasa.web2.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;

@Controller
@RequestMapping("ss")
@Slf4j
public class SessionController {
	// 세션에 값 저장
	@GetMapping("session1")
	public String session1(HttpSession session) {
		session.setAttribute("name", "홍길동");
		return "redirect:/";
	}
	
	// 세션에서 값 읽기
	@GetMapping("session2")
	public String session2(HttpSession session) {
		String name = (String) session.getAttribute("name");
		log.debug("세션의 값 : {}", name);
		return "ssView/session2";
	}
	
	// 세션의 값 삭제
	@GetMapping("session3")
	public String session3(HttpSession session) {
		session.removeAttribute("name");
		return "redirect:/";
	}
	
	// 로그인 폼으로 이동
	@GetMapping("login")
	public String login() {
		return "ssView/login";
	}
		
	// 로그인 처리
	@PostMapping("login")
	public String loginProcess(
			HttpSession session,
			@RequestParam("id") String id,
			@RequestParam("password") String pw
			) {
		log.debug("전송된 값: {}/{}", id, pw);
		// id가 "abc", 비밀번호가 "123"이면 로그인
		if(id.equals("abc") && pw.equals("123")) {
			session.setAttribute("loginId", id);
			return "redirect:/";
		} else {
			return "ssView/login";
		} 
	}
		
	// 로그아웃
	@GetMapping("logout")
	public String logout(
			HttpSession session
			) {
		session.removeAttribute("loginId");
		return "redirect:/";
	}
	
	// 로그인 폼으로 이동
	@GetMapping("loginTest")
	public String loginTest(HttpSession session) {
		String id = (String) session.getAttribute("loginId");
		if (id == null) {
			return "redirect:/ss/login";
		}
		return "ssView/loginTest";
	}
}

 

 

(3) [src/main/resources] - [templates.ssView] 안에 login.html 파일 생성 후 아래와 같이 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
	<h1>[로그인]</h1>
	<form action="login" method="post">
		<input type="text" name="id"><br>
		<input type="password" name="password"><br>
		<input type="submit" value="로그인">
	</form>
</body>
</html>

 

 

(4) [src/main/resources] - [templates.ssView] 안에 loginTest.html 파일 생성 후 아래와 같이 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>loginTest.html</title>
</head>
<body>
	<p>로그인해야만 보이는 페이지</p>
	<p>[[${session.loginId}]]환영합니다.</p>
</body>
</html>

 

 

(5) 결과 화면

 

 

※ 현재는 id가 "abc", 비밀번호가 "123"일 때만 로그인 가능하도록 조건을 걸어 놓음!

 

 

※ "로그아웃"을 누른 뒤 "로그인해야 들어갈 수 있는 메뉴"를 다시 클릭할 시 화면(자동으로 로그인 화면으로 이동시켜줌)