问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

spring session是怎么把session存入redis的

发布网友 发布时间:2022-04-10 03:33

我来回答

2个回答

热心网友 时间:2022-04-10 05:02

访问Spring Session官方网站:
在百度中查询Spring Session即可找到Spring Session的官方站点。
目前版本为1.0.2,1.0.3版本处于snapshot状态。
Spring指出,Spring Session具有如下能力:

(1) API and implementations for managing a user's session

(2) HttpSession - allows replacing the HttpSession in an application container (i.e. Tomcat) neutral way

(2-1)Clustered Sessions - Spring Session makes it trivial to support clustered sessions without being tied to an application container specific solution.

(2-2)Multiple Browser Sessions - Spring Session supports managing multiple users' sessions in a single browser instance (i.e. multiple authenticated accounts similar to Google).

(2-3)RESTful APIs - Spring Session allows providing session ids in headers to work with RESTful APIs

(3) WebSocket - provides the ability to keep the HttpSession alive when receiving WebSocket messages

对Spring Session有了基本了解之后,可以开始配置Maven的pom.xml,导入SpringSession的jar包
Spring官方文档指出,要使用Spring Session,配置如下依赖即可:

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>

实际上,spring-session-data-redis并不是一个实际的jar包,只不过它配置了其他的四个依赖:

Spring-session-data-redis是一个空的包,我们可以从如下截图中看出。Spring-session-data-redis仅仅只有一个META-INF文件夹。它的作用就在于引入其他四个包。

当然,实际上你也可以不配置spring-session-data-redis,而直接配置实际上导入的类:
<!-- Redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.5.2</version>
</dependency>

<!-- Spring Session -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.2</version>
</dependency>
我们这里,首先,配置spring-data-redis和jedis,这样,就可以使用spring-data-redis框架,来实现访问redis数据库。
spring-data-redis是spring的一个子项目,和spring-session一样。spring-session要访问redis,这里spring-session依赖spring-data-redis,来实现操作reids数据库。
Spring Core、Spring Web需要配置4.x版本。
当然,Spring Session还需要把Spring Web等常见的Spring包引入。Spring Session 1.0.2依赖Spring的版本为4.1.6以上,因此,3.x版本的Spring是无法使用的:
可以从Maven Repository查看依赖情况:http://mvnrepository.com/artifact/org.springframework.session/spring-session/1.0.2.RELEASE
此外,注意javax.servlet-api需要3.0.1版本以上。

配置application-context.xml文件
这里,我们以使用xml配置方式为例,当然也可以使用注解配置,详见SPring的官方例子(见参考资料)
备注:xml的配置方法官方给出了一个例子:http://docs.spring.io/spring-session/docs/1.0.2.RELEASE/reference/html5/guides/httpsession-xml.html
在application-context.xml文件中,加入:

<context:annotation-config/>
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" />
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/>

其中,${redis.host}等即redis数据库的服务器地址,端口,密码等信息,放在properties文件中即可。
修改web.xml,加入Spring Session的Filter
在web.xml文件中,加入:

<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

这样,所有的请求,都会被DelegatingFilterProxy处理,实际上,DelegatingFilterProxy会找到springSessionRepositoryFilter,创建它。每一次的请求还是由springSessionRepositoryFilter来过滤的。

The DelegatingFilterProxy will look up a Bean by the name of springSessionRepositoryFilter and cast it to a Filter. For every request that DelegatingFilterProxy is invoked, the springSessionRepositoryFilter will be invoked.

这里,Spring加入了一个Filter,其本质是:对每一个请求的request进行了一次封装。那么,在Controller里面拿出的request实际上是封装后的request,
调用request.getSession()的时候,实际上拿到是Spring封装后的session。这个session则存储在redis数据库中。
访问Web项目,查看session
访问Web项目,这个时候,使用redis-cli进入redis命令操作界面,在使用keys *可以查看所有的key:

第一个是当前访问的用户的session信息,第二个保存的是过期的时间。
可以查看session的详细内容如下:

可以看出,session对象被序列化后存入。因此,所有放入session的对象,都要实现Serializable接口。比如,我将所有的用户信息,封装到一个Authentication对象,那么
这对象就必须实现Serializable接口:

补充一下:
如果要设置Session的过期时间,通常我们会在web.xml文件中进行设置:
但是,使用Spring Session托管session后,这里的设置将会失效。我们要专门为Spring Session进行设置:
将application-context.xml,即步骤4中的的RedisHttpSessionConfiguration,设置其maxInactiveIntervalInSeconds属性即可。注意,maxInactiveIntervalInSeconds的的单位是秒! 如下将设置session为10分钟过期!

<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<property name="maxInactiveIntervalInSeconds" value="600"></property>
</bean>

热心网友 时间:2022-04-10 06:20

,所以我们很远必要做session同步,把session放到reids缓存服务器就能很好的解决问题。下面是代码简单的实现。
一、配置web.xml过滤器:

<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
<filter-name>sessionFil
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...换手机号显示你以设置拒收微信登陆.换绑.注册短信怎么解决? 伊拉克战争是哪些国家发动的?请快回答,我有急用! 二零零三年三月谁发动了对伊拉克的战争 西门子、美的、容声三个门的冰箱那个牌子又省电又实用? 海尔冰箱BCD-206 SCFM 放3档工作多长时间 ,停多长时间正常 海尔BCD-206SCFM基本参数 6年级上册数学练习册百分数50到53页答案 小学数学六年级(上):帮你学数学口算练习册2008年印刷版信息 小学数学六年级(上):帮你学数学口算练习册2010年印刷版信息 小学六年级数学上册百分数练习册《课堂作业本》答案64面第2题 “跟紧”的近义词是什么? 紧跟其后的成语解释 紧跟的近义词是什么 2010执业兽医资格考试模拟题谁有啊 紧跟的近义词是什么轻快的近义词是什么 孤城丽丽娜依应该杀掉谁 谁有09年执业兽医资格考试真题 谁有国家执业兽医资格历年考试真题(水生动物类)? 2009年执业兽医资格考试真题 高分求2010执业兽医资格考试模拟题 腾讯短视频APP微视,发布视频选择话题有什么作用?可以不选择吗? 孤城剧本杀玩过一次可以玩第二次吗 同学录留言大全有什么 同学录上给同学写的留言~~~ vue中expect indent got eos是什么意思 expected indentation of 2 space characters but found 0什么意思 把下面这段话翻译成英文,谢谢 Python语言中if语句的,貌似是缩进问题 我是江苏省人力资源本科毕业可以报考公务员什么岗位? 这些外贸英语如何翻译?多谢指教! “紧随其后”是什么意思? 华硕主板MZ31-ARO配什么型号CPU? 接着的近义词是什么 梦见三十几岁的儿子穿过内裤吃着馒头? 紧追不舍的近义词 快 怎样给10086客服评价 信用卡面签后多久能下卡? 紧跟而来的近义词。急!!! 中国移动人工服务后来的服务回馈短信,如果评价是非常不满意,服务人员会有什么惩罚么 线下信用卡面签以后多久 医学AR0S是什么意思? 前仆后继近义词 10086中国移动客服短信评价 紧随其后是什么意思 ar0367是什么手表的牌子 前赴后继近义词 是不是拨打10086后,要求服务评价? &quot;前赴后继&quot;和&quot;前仆后继&quot;的区别 打完10086电话,要对他们的服务进行评价 10086 原话是什么 前仆后继可以形容浪潮吗