Что такое сессия в Spring Boot и как ее использовать
В веб-приложениях сеанс — очень распространенное понятие. Он используется для хранения информации о состоянии между клиентом и сервером, такой как статус входа в систему, содержимое корзины покупок и т. д. В Spring Boot сеанс также является важным понятием. В этой статье мы расскажем, что такое сессия в Spring Boot и как ее использовать.
Что такое сессия
Сеанс — это механизм хранения информации о состоянии между клиентом и сервером. Как это работает: когда клиент отправляет запрос на сервер, сервер создает сеанс для запроса и присваивает сеансу уникальный идентификатор. Этот идентификатор будет отправлен клиенту и сохранен в файле cookie клиента. Когда клиент отправляет следующий запрос, клиент снова отправит идентификатор на сервер, и сервер использует идентификатор для получения соответствующего сеанса и, таким образом, получения ранее сохраненной информации о состоянии.
В Spring Boot сеанс реализуется через интерфейс HttpSession. Мы можем получать и устанавливать свойства в Session через интерфейс HttpSession, например:
@Controller
public class MyController {
@GetMapping("/login")
public String login(HttpSession session) {
session.setAttribute("username", "张三");
return "login";
}
@GetMapping("/home")
public String home(HttpSession session) {
String username = (String) session.getAttribute("username");
System.out.println("当前登录用户:" + username);
return "home";
}
}
В приведенном выше коде мы определяем два метода обработки запросов, а именно /login
и /home
. В /login
методе мы устанавливаем свойство, названное через интерфейс HttpSession username
. В /home
методе мы получаем атрибут через интерфейс HttpSession username
и распечатываем имя пользователя, вошедшего в систему в данный момент.
Использовать сеанс
Использовать сеанс в Spring Boot очень просто. Просто следуйте инструкциям ниже, чтобы настроить его.
1. Добавьте зависимости
Сначала вам нужно pom.xml
добавить в файл следующие зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Эта зависимость содержит основные функции веб-приложений Spring Boot и некоторые часто используемые зависимости.
2. Настройка сеанса
В Spring Boot мы можем application.properties
настроить некоторые свойства сеанса через файлы. Например, мы можем установить тайм-аут сеанса на 30 минут с помощью следующей конфигурации:
server.servlet.session.timeout=30m
В приведенной выше конфигурации мы использовали server.servlet.session.timeout
атрибут для установки тайм-аута сеанса. Значением этого атрибута может быть период времени, например 30m
30 минут.
3. Используйте сеанс
При использовании сеанса мы можем получать и устанавливать свойства сеанса через интерфейс HttpSession. Например, в приведенном выше коде мы используем session.setAttribute
метод для установки username
именованного свойства и session.getAttribute
метод для получения username
свойства.
В Spring Boot мы также можем получать и устанавливать свойства в сеансе с помощью аннотаций. Например, мы можем использовать @SessionAttributes
аннотации, чтобы пометить класс контроллера, чтобы указать, какие свойства в сеансе должен использовать класс контроллера. Например:
@Controller
@SessionAttributes("username")
public class MyController {
@GetMapping("/login")
public String login(Model model) {
model.addAttribute("username", "张三");
return "login";
}
@GetMapping("/home")
public String home(@ModelAttribute("username") String username) {
System.out.println("当前登录用户:" + username);
return "home";
}
}
В приведенном выше коде мы используем @SessionAttributes
аннотации для обозначения класса контроллера и указания имени атрибута сеанса, который будет использоваться username
. В /login
методе мы используем Model.addAttribute
метод для установки username
атрибута. В /home
методе мы используем @ModelAttribute
аннотацию для получения username
атрибута.
Образец кода
Ниже приведен полный пример кода, демонстрирующий, как использовать сеанс в Spring Boot.
Приложение.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Мойконтроллер.java
@Controller
@SessionAttributes("username")
public class MyController {
@GetMapping("/login")
public String login(Model model) {
model.addAttribute("username", "张三");
return "login";
}
@GetMapping("/home")
public String home(@ModelAttribute("username") String username) {
System.out.println("当前登录用户:" + username);
return "home";
}
}
логин.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<p>当前登录用户:${username}</p>
<a href="/home">进入主页</a>
</body>
</html>
home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<h1>Home</h1>
<p>当前登录用户:${username}</p>
</body>
</html>
В приведенном выше примере кода мы определяем MyController
класс контроллера с именем, который содержит два метода обработки запросов /login
и /home
. В /login
этом методе мы используем Model.addAttribute
метод для установки username
свойства сеанса с именем и возврата login
представления. В login
представлении мы используем ${username}
выражение, чтобы получить username
атрибут и отобразить его на странице. В /home
методе мы используем @ModelAttribute
аннотации для получения username
свойств и вывода их на консоль. В home
представлении мы также используем ${username}
выражения для получения username
свойств и отображения их на странице.
Подведем итог
Сессия — это механизм хранения информации о состоянии между клиентом и сервером. Это также очень важная концепция в Spring Boot. Из этой статьи мы узнали об основных концепциях и использовании сеанса в Spring Boot, а также о том, как упростить код с помощью аннотаций. Я надеюсь, что эта статья поможет каждому лучше понять и использовать Session в Spring Boot.