Spring - 16. session 사용하기

로그인에서 정보를 유지해야할때 사용하는 기능입니다.

대부분 로그인 쪽에서 많이사용한다고 됩니다.

 

스프링에서는 2가지 방법이있습니다.

1. HttpSession 

2. @SessionAttributes()

방법이있습니다.

 

1. HttpSession

이 방법은 servlet에서 사용한 방식이랑 똑같습니다.

아이디 입력후 로그인 누르면 로그인완료 페이지로 이동하는 방식입니다.

그후 로그아웃 버튼까지 입니다.

 

HttpSession 을 매개변수로 받아와서 setAttribute 로 저장합니다.

그러면 아래와 같은 페이지로 포워딩됩니다.

id같은경우는 저장되어있는 세션 id값을 받아 화면에 출력하였습니다.

 

 

logout도 비슷합니다.

session 메소드중 세션을 삭제하는 메소드를 호출하여 세션삭제를합니다.

 

2. @SessionAttributes

스프링의 애너테이션 이용하여 세션 저장및 삭제하는 방법입니다.

@SessionAttributes 는 메소드 레벨이아닌 클래스 레벨에 작성하여 

Model.로 값 보낼때 그 name값과 동일하면 세션으로 인식하여 저장합니다 .

 

세션을 사용하기위해서는 Controller의 class부분에 선언합니다 .

id의 값을 지정해준상태입니다 .

 

그후 addAttribute이용해 name이 id이면 스프링이 알아서 session에 등록을해줍니다 .

주의할점으로는 만약 세션 영역에 id가 이미 저장되어있으면 덮어씌우기 되니 조심해야할것같습니다 .

 

 

전체 코드

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>parameter main</title>
</head>
<body>
	<h2>4. HttpSession 이용하기</h2>
	<button onclick="location.href='${pageContext.servletContext.contextPath}/first/login'">파라미터 전달하기</button>
</body>
</html>

 

MenuController.java

package com.memory.parameter1;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;

@Controller
@RequestMapping("/first/*")
@SessionAttributes("id")
public class MenuController {

	// 4.4. HttpSession 이용하기
	@GetMapping("login")
	public void getLogin() {}
	
	@PostMapping("login1")
	public String postLogin1(HttpSession session, @RequestParam String id) {
		session.setAttribute("id", id);
		
		return "first/loginResult";
	}
	
	@GetMapping("logout1")
	public String logout1(HttpSession session) {
	
		session.invalidate();
		
		return "first/loginResult";
	}
	
	
	@PostMapping("login2")
	public String postLogin2(Model model, @RequestParam String id) {
		model.addAttribute("id", id);
		
		return "first/loginResult";
	}
	
	@GetMapping("logout2")
	public String logout2(SessionStatus status) {
		
		status.setComplete();
		
		return "first/loginResult";
	}
	
	
	
	
	
	
}
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유