SpringBoot整合redis存储session--揭秘SpringSession的核心原理
核心原理从@EnableRedisHttpSession这个注解入手开始分析 点进去发现给我们导入了这个组件,继续点进去发现RedisHttpSessionConfiguration这个类给容器中导入了RedisIndexedSessionRepository这个组件,这个组件就是redis操作session的类,也即session的增删改查相关操作都通过这个类来实现再看RedisHttpSess
核心原理
从@EnableRedisHttpSession这个注解入手开始分析 点进去发现
给我们导入了这个组件,继续点进去发现
RedisHttpSessionConfiguration这个类给容器中导入了RedisIndexedSessionRepository这个组件,这个组件就是redis操作session的类,也即session的增删改查相关操作都通过这个类来实现
再看RedisHttpSessionConfiguration继承了SpringHttpSessionConfiguration
点进SpringHttpSessionConfiguration这个类我们发现这个类给容器中导入了非常多的组件其中值得注意的是给容器中导入了这样一个组件
继续往下走:
我们发现SessionRepositoryFilter实际上实现了javax.servlet.Filter,我们的每个请求都会经过这个filter
继续往下走:
在SessionRepositoryFilter中有这样一个方法doFilterInternal ,它将我们原生的请求和响应拿过来进行包装,将包装后的请求和响应应用到我们的整个执行链,这一段代码也就是springSession的核心原理
我们获取session 通常都是
HttpSession session = request.getSession();
它将我们的request进一步包装成 wrappedRequest 我们来看看他是如何包装的
点进SessionRepositoryRequestWrapper 我们发现它重写了一个方法
总结:
简单的用了一下装饰者模式,此处我用的是redis存储session,当然也可以使用其他存储session,基本原理都是一样
更多推荐
所有评论(0)