Spring session整合到Redis过程解析_java

来源:脚本之家  责任编辑:小易  

方法/步骤1访问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)ClusteredSessions-Spring Session makes it trivial to support clusteredsessions without being tied to an application container specificsolution.(2-2)Multiple Browser Sessions-Spring Session supports managing multiple users' sessions in a singlebrowser instance(i.e.multiple authenticated accounts similar toGoogle).(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 messages2对Spring Session有了基本了解之后,可以开始配置Maven的pom.xml,导入SpringSession的jar包Spring官方文档指出,要使用Spring Session,配置如下依赖即可:org.springframework.sessionspring-session-data-redis1.0.2.RELEASE实际上,spring-session-data-redis并不是一个实际的jar包,只不过它配置了其他的四个依赖:3Spring-session-data-redis是一个空的包,我们可以从如下截图中看出。Spring-session-data-redis仅仅只有一个META-INF文件夹。它的作用就在于引入其他四个包。4当然,实际上你也可以不配置spring-session-data-redis,而直接配置实际上导入的类:Redis->org.springframework.dataspring-data-redis1.4.2.RELEASEredis.clientsjedis2.5.2Spring Session->org.springframework.sessionspring-session1.0.2.RELEASEorg.apache.commons</groupId>commons-pool22.2我们这里,首先,配置spring-data-redis和jedis,这样,就可以使用spring-data-redis框架,来实现访问redis数据库。spring-data-redis是spring的一个子项目,和spring-session一样。spring-session要访问redis,这里spring-session依赖spring-data-redis,来实现操作reids数据库。5Spring 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版本以上。6配置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文件中,加入:p:host-name="${redis.host}"p:port="${redis.port}"p:password="${redis.pass}"p:pool-config-ref="poolConfig"/>其中,${redis.host}等即redis数据库的服务器地址,端口,密码等信息,放在properties文件中即可。7修改web.xml,加入Spring Session的Filter在web.xml文件中,加入:springSessionRepositoryFilterorg.springframework.web.filter.DelegatingFilterProxyspringSessionRepositoryFilter这样,所有的请求,都会被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数据库中。8访问Web项目,查看session访问Web项目,这个时候,使用redis-cli进入redis命令操作界面,在使用keys*可以查看所有的key:9第一个是当前访问的用户的session信息,第二个保存的是过期的时间。可以查看session的详细内容如下:10可以看出,session对象被序列化后存入。因此,所有放入session的对象,都要实现Serializable接口。比如,我将所有的用户信息,封装到一个Authentication对象,那么这对象就必须实现Serializable接口:11补充一下:如果要设置Session的过期时间,通常我们会在web.xml文件中进行设置:但是,使用Spring Session托管session后,这里的设置将会失效。我们要专门为Spring Session进行设置:将application-context.xml,即步骤4中的的RedisHttpSessionConfiguration,设置其maxInactiveIntervalInSeconds属性即可。注意,maxInactiveIntervalInSeconds的的单位是秒!如下将设置session为10分钟过期!property>http://jingyan.baidu.com/article/c33e3f488a1024ea15cbb5e3.htmlwww.zgxue.com防采集请勿采集本网。

为何要用Spring-session

}} 在上面的这个例子中,我们并没有关闭Session,但程序并没有任何问题,那是因为Spring已经帮我们关闭了。那么再看一个例子: 程序代码public class DaoReal extends HibernateDaoSupport implements Dao

在传统单机web应用中,一般使用tomcat/jetty等web容器时,用户的session都是由容器管理。浏览器使用cookie中记录sessionId,容器根据sessionId判断用户是否存在会话session。这里的限制是,session存储在web容器中,被单台服务器容器管理。

应该是注入HibernateTemplate吧 然后使用HibernateTemplate对象 HibernateTemplate的常用方法: voiddelete(Objectentity):删除指定持久化实例。deleteAll(Collection entities):删除集合内全部

但是网站主键演变,分布式应用和集群是趋势(提高性能)。此时用户的请求可能被负载分发至不同的服务器,此时传统的web容器管理用户会话session的方式即行不通。除非集群或者分布式web应用能够共享session,尽管tomcat等支持这样做。但是这样存在以下两点问题:

一。分布式Session的几种实现方式 1.基于数据库的Session共享 2.基于NFS共享文件系统 3.基于memcached 的session,如何保证 memcached 本身的高可用性?4.基于resin/tomcat web容器本身的session

需要侵入web容器,提高问题的复杂

spring下如何测试session 刚来第三天,领导先让在spring下用junit测试,现在让测试session,不知道怎么搞,求大神指导。解决思路- 引入Spring-test包,然后: MockHttpSession session=new

web容器之间共享session,集群机器之间势必要交互耦合

在使用spring时,经常需要在普通类中获取session,request等对像. 比如一些AOP拦截器类,在有使用struts2时,因为struts2有一个接口使用org.apache.struts2.ServletActionContext即可很方便的取到

有了spring-session之后,我们可以将session保存到Redis、Mongodb等nosql数据库。这样就避免了单点缓存的限制。

Let's do it

1.引入jar包

<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId></dependency><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency>

2、在application.properties中加入如下配置文件

#设置session存储格式为redisspring.session.store-type=redisserver.servlet.session.timeout=3600#session更新策略,有ON_SAVE、IMMEDIATE,前者是在调用#SessionRepository#save(org.springframework.session.Session)时,在response commit前刷新缓存,#后者是只要有任何更新就会刷新缓存spring.session.redis.flush-mode=on-savespring.session.redis.namespace=spring:session#redis配置spring.redis.database=0spring.redis.host=10.34.51.234spring.redis.password=123456spring.redis.pool.max-active=8spring.redis.pool.max-idle=8spring.redis.pool.max-wait=-1spring.redis.pool.min-idle=0spring.redis.port=6379

3、配置redis服务器

(略)

4、编写SpringBoot程序

5、运行登录一下吧

可以看到查看到了session信息

6、未完成序列化操作。不过我感觉也没必要完成序列化操作吧~

结束!

实际上,spring-session-data-redis并不是一个实际的jar包,只不过它配置了其他的四个依赖(如图,图中标绿色的四个):Spring-session-data-redis是一个空的包:Spring Core、Spring Web配置4.x版本:Spring Session还需要把Spring Web等常见的Spring包引入。Spring Session 1.0.2依赖Spring的版本为4.1.6以上,因此3.x版本的Spring是无法使用的。访问Web项目,查看session:访问Web项目,这个时候,使用redis-cli进入redis命令操作界面,在使用keys*可以查看所有的key。补充一下,如果要设置Session的过期时间,通常我们会在web.xml文件中进行设置根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。具体步骤如下:/导致这种情况的原因主要是…内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • spring整合redis(jedis)实现session共享的过程
  • springboot整合redis、apachsolr和springsession的示例
  • spring boot整合redis实现shiro的分布式session共享的方法
  • springboot2.x 整合spring-session实现session共享功能
  • spring boot集成spring session实现session共享的方法
  • springboot实现多服务器session共享
  • 解决前后端分离 vue+springboot 跨域 session+cookie失效问题
  • springcloud实现redis在各个微服务的session共享问题
  • java微信二次开发(三) java微信各类型消息封装
  • 在spring异步调用中传递上下文的方法
  • eclipse使用maven搭建spring mvc图文教程
  • java中volatile的作用实例解析
  • spring security 构建rest服务实现rememberme 记住我功能
  • js判断是否含有gbk以外的字符的函数
  • java 内部类的实例详解
  • java实现的贷款金额计算功能示例
  • 浅谈java实现redis的发布订阅(简单易懂)
  • java组件smartupload实现上传文件功能
  • 如何使用Spring Session实现分布式Session管理?
  • 如何使用Spring Session实现分布式Session管理
  • spring怎么添加一个session
  • Spring如何管理Session
  • Spring如何管理Session
  • Spring如何注入Session对象
  • 如何使用Spring Session实现分布式Session管理
  • 如何测试spring-session
  • spring怎么获取session
  • spring boot 怎么处理 session
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页spring整合redis(jedis)实现session共享的过程springboot整合redis、apachsolr和springsession的示例spring boot整合redis实现shiro的分布式session共享的方法springboot2.x 整合spring-session实现session共享功能spring boot集成spring session实现session共享的方法springboot实现多服务器session共享解决前后端分离 vue+springboot 跨域 session+cookie失效问题springcloud实现redis在各个微服务的session共享问题java微信二次开发(三) java微信各类型消息封装在spring异步调用中传递上下文的方法eclipse使用maven搭建spring mvc图文教程java中volatile的作用实例解析spring security 构建rest服务实现rememberme 记住我功能js判断是否含有gbk以外的字符的函数java 内部类的实例详解java实现的贷款金额计算功能示例浅谈java实现redis的发布订阅(简单易懂)java组件smartupload实现上传文件功能java使double保留两位小数的多方java8 十大新特性详解java.net.socketexception: connjava写入文件的几种方法分享java环境变量的设置方法(图文教程java 十六进制与字符串的转换java list用法示例详解java中file类的使用方法javaweb实现文件上传下载功能实例java 字符串截取的三种方法(推荐java实现账户取款和存款操作分页技术原理与实现之java+oracle代码实现java map 按照value排序的实现方法java jdbc连接mysql数据库实现增删改查操spring boot集成mybatis的方法教程java并发编程callable与future的应用实例详解java中多进程编程的实现java核心库实现aop过程java web支持jsonp的实现代码java 实现多线程切换等待唤醒交替打印奇偶
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved