Spring Boot 中的 Session 是什么,如何使用

简介: Spring Boot 中的 Session 是什么,如何使用

Spring Boot 中的 Session 是什么,如何使用


在 Web 应用程序中,Session 是一个非常常见的概念。它用于在客户端和服务器之间维护状态信息,例如登录状态、购物车内容等。在 Spring Boot 中,Session 也是一个重要的概念。本文将介绍 Spring Boot 中的 Session 是什么以及如何使用它。


image.png


什么是 Session


Session 是一种在客户端和服务器之间维护状态信息的机制。它的工作原理是:当客户端发送请求到服务器时,服务器会为该请求创建一个 Session,并为该 Session 分配一个唯一的标识符。这个标识符会被发送到客户端,并保存在客户端的 Cookie 中。当客户端发送下一次请求时,客户端会将该标识符再次发送给服务器,服务器通过该标识符来获取对应的 Session,从而获取之前保存的状态信息。


在 Spring Boot 中,Session 是通过 HttpSession 接口来实现的。我们可以通过 HttpSession 接口来获取和设置 Session 中的属性,例如:


@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 属性,并打印出当前登录用户的用户名。


使用 Session


在 Spring Boot 中使用 Session 非常简单。只需要按照以下步骤进行配置即可。


1. 添加依赖

首先需要在 pom.xml 文件中添加以下依赖:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这个依赖包含了 Spring Boot Web 应用程序的核心功能和一些常用的依赖。


2. 配置 Session

在 Spring Boot 中,我们可以通过 application.properties 文件来配置 Session 的一些属性。例如,我们可以通过以下配置来设置 Session 的超时时间为 30 分钟:


server.servlet.session.timeout=30m

1

在以上配置中,我们使用了 server.servlet.session.timeout 属性来设置 Session 的超时时间。这个属性的值可以是一个时间段,例如 30m 表示 30 分钟。


3. 使用 Session

在使用 Session 时,我们可以通过 HttpSession 接口来获取和设置 Session 中的属性。例如,在上面的代码中,我们使用了 session.setAttribute 方法来设置一个名为 username 的属性,并使用了 session.getAttribute 方法来获取 username 属性。


在 Spring Boot 中,我们也可以通过注解来获取和设置 Session 中的属性。例如,我们可以使用 @SessionAttributes 注解来标记一个控制器类,以表示该控制器类需要使用 Session 中的哪些属性。例如:


@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 注解来标记了一个控制器类,并指定了需要使用的 Session 属性名为 username。在 /login 方法中,我们使用了 Model.addAttribute 方法来设置 username 属性。在 /home 方法中,我们使用了 @ModelAttribute 注解来获取 username 属性。


示例代码


下面是一个完整的示例代码,演示了如何在 Spring Boot 中使用 Session。


Application.java


@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}


MyController.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";
    }
}


login.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 的 Session 属性,并返回 login 视图。在 login 视图中,我们使用了 ${username} 表达式来获取 username 属性,并将其显示在页面上。在 /home 方法中,我们使用了 @ModelAttribute 注解来获取 username 属性,并将其打印到控制台中。在 home 视图中,我们也使用了 ${username} 表达式来获取 username 属性,并将其显示在页面上。


总结


Session 是一种在客户端和服务器之间维护状态信息的机制,在 Spring Boot 中也是一个非常重要的概念。通过本文的介绍,我们了解了 Spring Boot 中 Session 的基本概念和使用方法,以及如何通过注解来简化代码。希望本文能够帮助大家更好地理解和使用 Spring Boot 中的 Session。


相关文章
|
存储 NoSQL Java
Spring Session分布式会话管理
Spring Session分布式会话管理
96 0
|
6月前
|
缓存 前端开发 Java
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
169 1
|
1月前
|
前端开发 Java 数据安全/隐私保护
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
文章通过一个简单的SpringBoot项目,详细介绍了前后端如何实现用户登录功能,包括前端登录页面的创建、后端登录逻辑的处理、使用session验证用户身份以及获取已登录用户信息的方法。
159 2
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
|
1月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
143 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
2月前
|
存储 NoSQL Java
Spring Session框架
Spring Session 是一个用于在分布式环境中管理会话的框架,旨在解决传统基于 Servlet 容器的会话管理在集群和云环境中的局限性。它通过将用户会话数据存储在外部介质(如数据库或 Redis)中,实现了会话数据的跨服务器共享,提高了应用的可扩展性和性能。Spring Session 提供了无缝集成 Spring 框架的 API,支持会话过期策略、并发控制等功能,使开发者能够轻松实现高可用的会话管理。
Spring Session框架
|
5月前
|
JSON 前端开发 Java
Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式
Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式
|
6月前
|
负载均衡 NoSQL Java
Spring Boot + Redis 处理 Session 共享
Spring Boot + Redis 处理 Session 共享
65 1
|
前端开发 JavaScript Java
SpringBoot Ajax跨域问题(session共享问题)
ajax 发送post请求至springBoot出现跨域问题 需要在springBoot加上注解 @CrossOrigin 就能解决
64 0
|
6月前
|
存储 NoSQL 前端开发
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
186 0
|
6月前
|
存储 NoSQL Redis
spring-session-core排除某些接口不设置session
spring-session-core排除某些接口不设置session
140 0