对于分布式应用来说,最开始遇到的问题就是 session 的存储了,解决方案大致有如下几种
- 使用 spring-session 它可以把 session 存储到你想存储的位置,如 redis,mysql 等
- 使用 JWTs ,它使用算法来验证 token 的合法性,是否过期,并且 token 无法被伪造,信息也是无法被篡改的
本文内容主要说 spring-session 使用 redis 来存储 session ,实现原理,修改过期时间,自定义 key 等
spring-session 对于内部系统来说还是可以的,使用方便,但如果用户量上来了的话,会使 redis 有很大的 session 存储开销,不太划算。
使用
使用起来比较简单,简单说一下,引包,配置,加注解 。如下面三步,就配置好了使用 redis-session
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
spring.redis.host=localhost
# 其它 超时,端口,库,连接池,集群,就自己去找了
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 1800)
测试:因为是在 getSession 的时候才会创建 Session ,所以我们必须在接口中调用一次才能看到效果
@GetMapping("/sessionId")
public String sessionId(){
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession session = request.getSession();
session.setAttribut