스프링 부트에서 각 브라우저마다 세션 ID를 확인하는 것은 일반적으로 HTTP 세션을 통해 이루어진다.
브라우저가 서버에 요청을 보낼 때마다 서버는 각 요청에 대해 세션 ID를 생성하거나 사용한다.
세션 ID는 브라우저와 서버 간의 연결을 유지하고 해당 세션에 저장된 데이터에 접근하는 데 사용된다.
@SessionAttributes
특정 브라우저의 세션에 값을 저장하고 사용하고 싶을땐 어떻게 할까 ?
@SessionAttributes 를 사용하면 된다.
이 어노테이션은 클래스레벨 어노테이션이다
아래의 코드를 보자
package com.hyukjin.springboot.myfirstwebapp.login;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
@Controller
@SessionAttributes("name")
public class LoginController {
private AuthenticationService authenticationService;
public LoginController(AuthenticationService authenticationService) {
this.authenticationService = authenticationService;
}
@GetMapping("login")
// src/main/resources/META-INF/resources/WEB-INF/jsp/sayHello.jsp
public String gotoLoginPate() {
return "login";
}
@PostMapping("login")
public String gotoWelcomePage(@RequestParam String name,
@RequestParam String password,
ModelMap model) {
if (authenticationService.authenticate(name, password)) {
model.put("name", name);
//model.put("password", password);
//name -> hyukjin
// password -> 981222
return "welcome";
}
model.put("errorMessage", "Invalide Credentials! Please try again.");
return "login";
}
}
위의 LoginController 에선 name 을 세션에 저장하길 원한다.
gotoWelcomePage 핸들러에서 model.put("name", name) 에서 저장된 name 은 세션레벨에 저장이 된다.
세션 속성을 공유하기 원하는 컨트롤러 마다 @SessionAttributes를 적용해주자
package com.hyukjin.springboot.myfirstwebapp.todo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import java.util.List;
@Controller
@SessionAttributes("name")
public class TodoController {
private TodoService todoService;
public TodoController(TodoService todoService) {
this.todoService = todoService;
}
@RequestMapping("list-todos")
public String listAllTodos(ModelMap model) {
List<Todo> todos = todoService.findByUsername("hello");
model.put("todos", todos);
System.out.println(model.values());
return "listTodos";
}
}
@SessionAttributes("name") 어노테이션을 추가 함으로서 이 컨트롤러에선 세션의 name 속성에 접근이 가능하다
이 name 속성은 명시하지 않아도 자동으로 model에 담겨있으며 JSP 가 뷰를 렌더링 할때 읽을 수 있다.
listTodos.jsp
<html>
<head>
<title>List Todos Page</title>
</head>
<body>
<div>Welcome to your page</div>
<div>your name is ${name}</div>
<div>Your Todos are ${todos}</div>
<%-- <div>Your Password: ${password}</div>--%>
</body>
</html>
'JAVA' 카테고리의 다른 글
webjars 를 이용한 bootstrap, jquery 추가 방법 / MAVEN (0) | 2024.05.06 |
---|---|
JSTL 사용법/ MAVEN (0) | 2024.05.05 |
JSP 서빙/ MAVEN (0) | 2024.05.04 |
JDBC / Maven (0) | 2024.05.04 |
@ConfigurationProperties (0) | 2024.05.03 |