로그인에서 정보를 유지해야할때 사용하는 기능입니다.
대부분 로그인 쪽에서 많이사용한다고 됩니다.
스프링에서는 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";
}
}
'프로그래밍 > Spring' 카테고리의 다른 글
Spring - 16. 파일 업로드(단일, 다중) (4) | 2021.10.29 |
---|---|
Spring - 15. parameter 전송 및 받아오기 (0) | 2021.10.28 |
Spring - 14. MVC mapping (0) | 2021.10.27 |
Spring - 14. Web MVC Project 기본설정(어노테이션 버전) (0) | 2021.10.27 |
Spring - 13. MVC 프로젝트 (0) | 2021.10.26 |