`

spring-session之一 初探 spring-session

阅读更多

spring-session之一 初探 spring-session

1.什么是spring-session

1.1 背景 -session会话共享

HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。
但是我们把应用搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户的Http请求将有可能被分发到两个不同的应用中。

那问题来了,如何保证不同的web站点能够共享同一份session数据呢?

最简单的想法,就是把session数据保存到内存以外的一个统一的地方,例如Memcached/Redis等数据库中。
那问题又来了,如何替换掉Servlet容器创建和管理的HttpSession的实现呢?

  1. 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略。

    这方面其实早就有开源项目了,例如memcached-session-manager(目前我们的官方商城都是使用这个),以及tomcat-redis-session-manager
    不过这种方式有个缺点,就是需要耦合Tomcat/Jetty等Servlet容器的代码。

  2. 设计一个Filter,利用HttpServletRequestWrapper,实现自己的 getSession()方法,接管创建和管理Session数据的工作。spring-session就是通过这样的思路实现的。

1.2 spring-session简介

spring-session 是Spring的项目之一,

spring-session 提供了一套创建和管理Servlet HttpSession的方案。spring-session 提供了集群Session(Clustered Sessions)功能,默认采用外置的Redis来存储Session数据,以此来解决Session共享的问题。

下面是来自官网的特性介绍:

Spring Session provides the following features:

  • API and implementations for managing a user's session
  • HttpSession - allows replacing the HttpSession in an application container (i.e. Tomcat) neutral way
    • Clustered Sessions - Spring Session makes it trivial to support clustered sessions without being tied to an application container specific solution.
    • Multiple Browser Sessions - Spring Session supports managing multiple users' sessions in a single browser instance (i.e. multiple authenticated accounts similar to Google).
    • RESTful APIs - Spring Session allows providing session ids in headers to work with RESTful APIs
  • WebSocket - provides the ability to keep the HttpSession alive when receiving WebSocket messages

2.自学源码使用 (以redis为例子)

步骤(参考 http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession.html):

  1. 先从 GitHub https://github.com/spring-projects/spring-session 下载源码
  2. 本地安装 gradle (略),参考 http://feitianbenyue.iteye.com/blog/2326268
  3. 本地安装 redis (need 2.8+) 并启动(略)
  4. 基于 spring-session 根目录,执行 gradlew :samples:httpsession-xml:tomcatRun

然后可以打开 http://localhost:8080 ,可以看到以下界面,并且可以使用这个页面来设置session 属性

3.redis 里面的key

打开 redis-cli,输入

keys *

结果:

可以看出,在 redis 里面的 spring-session 相关的 key 是以 spring:session: 开头

并且有以下的key

127.0.0.1:6379> keys spr*
1) "spring:session:expirations:1474542840000"
2) "spring:session:sessions:c3ae0dba-058e-4eca-99ad-6ec5225fd6e0"
3) "spring:session:sessions:expires:c3ae0dba-058e-4eca-99ad-6ec5225fd6e0"

至此,我们大概知道 spring-session 是什么东东, 大概怎么玩, 下面我们来聊聊项目中如何使用他

4.参考

---to be continued

0
0
分享到:
评论

相关推荐

    spring-session-data-redis-2.0.4.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-session-data-redis-2.0.4.RELEASE.jar; 赠送原API文档:spring-session-data-redis-2.0.4.RELEASE-javadoc.jar; 赠送源代码:spring-session-data-redis-2.0.4.RELEASE-sources.jar; 赠送...

    spring-session-core-2.0.5.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-session-core-2.0.5.RELEASE.jar; 赠送原API文档:spring-session-core-2.0.5.RELEASE-javadoc.jar; 赠送源代码:spring-session-core-2.0.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:...

    spring-session-data-redis-2.0.4.RELEASE-API文档-中文版.zip

    赠送jar包:spring-session-data-redis-2.0.4.RELEASE.jar; 赠送原API文档:spring-session-data-redis-2.0.4.RELEASE-javadoc.jar; 赠送源代码:spring-session-data-redis-2.0.4.RELEASE-sources.jar; 赠送...

    spring-session-1.3.5.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-session-1.3.5.RELEASE.jar; 赠送原API文档:spring-session-1.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-session-1.3.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-session-...

    spring-session+spring依赖jar包

    spring-session+spring依赖jar包,包含spring4.0.2.RELEASE相关jar包和commons-pool2-2.4.2.jar,jedis-2.7.3.jar,spring-data-redis-1.6.2.RELEASE.jar,spring-session-1.1.1.RELEASE.jar

    Spring-session2整合spring5+redis

    再者,Spring-session-data-redis是Spring Session的一个模块,专门针对Redis存储会话数据。它提供了会话监听、过期策略、以及会话复制等功能,使得在分布式环境中,多个服务器可以共享和访问用户的会话信息。 最后...

    spring-session-redis/spring整合redis管理session依赖jar包

    commons-pool2-2.3.jar,jedis-2.8.0.jar,spring-data-redis-1.6.0.RELEASE.jar,spring-session-1.1.1.RELEASE.jar,Spring-data-redis(Version 1.6.0.RC1)中文版.pdf

    spring-session-1.3.5.RELEASE-API文档-中文版.zip

    赠送jar包:spring-session-1.3.5.RELEASE.jar; 赠送原API文档:spring-session-1.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-session-1.3.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-session-...

    spring-session-1.3.0.RELEASE-API文档-中文版.zip

    赠送jar包:spring-session-1.3.0.RELEASE.jar; 赠送原API文档:spring-session-1.3.0.RELEASE-javadoc.jar; 赠送源代码:spring-session-1.3.0.RELEASE-sources.jar; 包含翻译后的API文档:spring-session-...

    自己实现的spring-session

    自己实现spring-session,实现单点登陆的功能 使用filter拦截用户的请求,在filter中包装request,在request的包装类requestWrapper中,重写getSession(), 和getSession(boolean create)。自己实现httpSession,...

    spring-session-1.2.1 源码

    spring-session-1.2.1 源码spring-session-1.2.1 源码spring-session-1.2.1 源码

    spring-session-core-2.0.5.RELEASE-API文档-中文版.zip

    赠送jar包:spring-session-core-2.0.5.RELEASE.jar; 赠送原API文档:spring-session-core-2.0.5.RELEASE-javadoc.jar; 赠送源代码:spring-session-core-2.0.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:...

    spring-session-1.3.0.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-session-1.3.0.RELEASE.jar 赠送原API文档:spring-session-1.3.0.RELEASE-javadoc.jar 赠送源代码:spring-session-1.3.0.RELEASE-sources.jar 包含翻译后的API文档:spring-session-1.3.0....

    spring-session实现session共享

    Spring-Session作为一个优秀的解决方案,它结合了Redis等分布式存储,有效地解决了这个问题,实现了跨域和多应用之间的Session统一存储,进而支持单点登录(Single Sign-On, SSO)。 Spring-Session是Spring社区...

    spring-session+spring的依赖包

    包含spring4.0相关jar包和commons-pool2-2.4.2.jar,jedis-2.7.3.jar,spring-data-redis-1.6.2.RELEASE.jar,spring-session-1.1.1.RELEASE.jar

    nginx+spring-session+redis 实现session共享

    `Spring-Session` 是Spring的一个扩展模块,它允许我们在不修改现有代码的情况下,将session数据持久化到外部存储,如Redis。这样,所有服务器都可以访问同一个session存储,确保了会话状态的一致性。 接着,我们来...

    学习Spring-Session+Redis实现session共享

    Spring-Session正是为此而设计的一个框架,它提供了一种机制来存储用户的会话信息至中央数据存储区,如Redis等,从而实现跨服务共享。 #### 一、Spring-Session简介 Spring-Session是Spring框架提供的一个用于管理...

    Spring-session共享所需jar合集.zip

    jedis-2.7.3.jar,spring-session-1.1.1.RELEASE.jar,spring-data-redis-1.6.2.RELEASE.jar等。。。

    spring session jar包

    spring-session-1.0.2.RELEASE.jar

    spring-redis-session 自定义 key 和过期时间

    <artifactId>spring-session-data-redis 然后,我们需要在 application.properties 文件中配置 Redis 连接信息,例如: spring.redis.host=localhost 结论 Spring-Redis-Session 提供了一个灵活的会话管理机制...

Global site tag (gtag.js) - Google Analytics