小鸡炸

导航

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 2022-01-19 10:41  小鸡炸  阅读(314)  评论(0编辑  收藏  举报