用户服务模块(Spring Session底层原理与Jwt会话管理)

本文探讨了SpringSession的底层原理,包括如何通过SessionRepositoryFilter包装session,使用redis存储,以及session的过期时间和续签机制。同时,介绍了JWT的分布式登录实现,从用户登录验证到令牌的生成、存储、验证以及无状态特性。对比了JWT与Session的区别,强调JWT的无服务器状态和减少交互的优点。
摘要由CSDN通过智能技术生成

一、Spring Session底层原理

昨天用Spring Session实现了用户分布式Session,那么为什么集成了springSession之后就可以把session存放在redis里面去?原理是什么?

(一) Spring Session底层原理
通过一个SessionRepositoryFilter将请求中原生的request、response以及HttpSession拦截,并做一个包装,重写内部获取session的逻辑,将getSession()做了一个重写。
那么此时Controller中获取到的session就是一个重写过逻辑的session了。

(二) 包装的过程:就是和redis整合:createSession这个接口--->首先将session存储到一个本地Map中,再将该Map信息存到redis中。

(三) Session的使用时间需要有所记录
通过redis的key设置一个过期时间,该时间体现在@EnableRedisHttpSession()设置的参数中。

(四)续签问题
在过期时间内(30分钟)再次请求登录,session过期时间刷新为30分钟,从头开始。
不过Redis中key的过期时间并不是是再每次的getAttribute的时候更新,为了减少与redis的交互。但是可以设置 。

(五)先取的是本地的session(存在一个Map中)还是redis中的呢?
首先说明的是:每一次请求到达不同的服务器上,第一次都必须从redis里面拉,并放在本地map中,剩下请求优先取的是本地缓存里的,本地map失效后再去取redis中,可以减少与redis请求次数,较少TPS。

二、JWT会话管理

(1) Jwt: JSON WEB TOKEN实现用户分布式登录
实现过程

以下信息参考:https://www.cnblogs.com/yuanrw/p/10089796.html

1、用户登录输入登录信息,服务器验证是否正确(数据库中是否存在该用户信息)
2、通过Jwt工具类生成token,并将token存储再客户端,例如再local storage或cookie中
3、之后的HTTP请求之前都将token添加到Header中(Authorization:jwttoken)
4、服务器在执行Controller方法之前,需要对token信息进行验证(拦截器操作,getHeader(key)得到token信息),将token信息解码,如果当前令牌有效,则接受请求
5、一旦用户注销,令牌将在客户端被销毁,不需要与服务器进行交互一个关键是,令牌是无状态的。
后端服务器不需要保存令牌或当前session的记录。

(2)JWT的组成和与Session的区别以及优缺点
JWT组成参考这篇文章,总结的很好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值