小鸡炸

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

SpringBoot _SpringSession

SpringSession介绍

在这个微服务,分布式的时代,很多传统的实现方案变的不再那么适用,比如传统的web服务将session放在内存中的情况,当web服务做水平扩展部署的时候,session共享就成了需要处理的问题。目前有很多成熟的技术可供我们选择,下面简单介绍最近用到的spring-boot+spring-session实现session共享的方案。

SpringSession依赖Redis、session的key和value都存放在redis中、依赖cookie实现,
原理:浏览器第一次请求微服务,微服务随机生成一个sessionid、存放在redis中、并把这个sessionid存放在浏览器中的cookie传回到浏览器、下次浏览器请求任何微服务都会携带这个cookie值去redis中匹配。
缺点:(由于cookie不能跨域只能跨端口、故需要把所有微服务部署在同一个服务器中、或使用网关代理)

一、引入依赖

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
<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>

二、添加Session配置类

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class SessionConfig {
}

maxInactiveIntervalInSeconds: 设置 Session 失效时间,使用 Redis Session 之后,原 Spring Boot 的 server.session.timeout 属性不再生效。

三、添加Controller测试

@RestController
public class SessionController {
	@RequestMapping("/sesesion")
	public String uid(HttpSession session) {
	    session.setAttribute("name", "管理员");
	    return session.getId();
	}
}

posted on   小鸡炸  阅读(325)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示