06-springboot系列:共享session

老子叫甜甜 提交于 2020-10-28 12:31:36


分布式系统中,Session 共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一


共享 Session

Spring Session 提供了一套创建和管理 Servlet HttpSession 的方案。Spring Session 提供了集群 Session(Clustered Sessions)功能,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的问题。


  • 引入依赖

<dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>        </dependency>        <dependency>            <groupId>org.apache.commons</groupId>            <artifactId>commons-pool2</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>

  • Session 配置类

package com.example.session.redis.config;
import org.springframework.context.annotation.Configuration;import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@Configuration@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1*30)public class SessionConfig {

  • Controller获取sessionId序列号

package com.example.session.redis.controller;
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;import java.util.UUID;
@RestControllerpublic class HelloWordController {
@RequestMapping("/uid") String uid(HttpSession session) { UUID uid = (UUID) session.getAttribute("uid"); if (uid == null) { uid = UUID.randomUUID(); } session.setAttribute("uid", uid); return session.getId(); }}


  • 启动浏览器访问地址:

http://localhost:8080/uid   --9e94a748-b260-4e46-bb2d-661a9a2977c3


  • 登录redis客户端,可以 查看到session值和过期时间



源码获取:


关注公众号,输入"springboot-parent"获取git地址



历史回顾:


[20200229]  01-springboot系列:入门篇
[20200301]  02-springboot系列: web特性
[20200302]  03-springboot系列:数据库操作及前端渲染
[20200310]  04-springboot系列:Thymeleaf语法讲解

[20200329] 05-springboot系列:redis使用





 



  长按关注公众号





作者微信号:13128600812

欢迎加入技术研究,备注:1






本文分享自微信公众号 - IT技术屋(zhanglcxyworkshop)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!