编程技术分享平台

网站首页 > 技术教程 正文

spring-session的使用详解(spring sessionfactory)

xnh888 2024-10-13 11:06:24 技术教程 94 ℃ 0 评论

spring session作用:

说白了就是对session就行了一个第三方的管理。解决了session共享的问题。

为什么要使用spring-session:

在我们早期的工程中我们的工具比较简单,采用的是一个war包的形式所有的文件都是在一个工程中这样我们就可以直接通过servlet容器创建与管理,随着网站访问的人越来越多,服务器的压力越大的时候,我们可能就会采用集群的方式管理项目(把同一工程复制多份放到不同的不服务器),这样又会带来问题。所以我们会采用Nginx+tomcat的形式处理。我们就可以通过ip_hash来保证session。随着业务的增大我们会对项目进行拆分,把各个业务模块进行拆分部署(分布式)。这时候我们就需要通过redis/memcached等来进行session的管理。

具体步骤:

  1. 编写一个配置类,用来启用RedisHttpSession功能,并向Spring容器中注册一个RedisConnectionFactory。

    @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 7200)

    publicclass RedisHttpSessionConfig {

    @Bean

    public RedisConnectionFactory connectionFactory() {

    JedisConnectionFactory connectionFactory = new JedisConnectionFactory();

    return connectionFactory;

    }

    }

  2. 编写一个一个AbstractHttpSessionApplicationInitializer实现类,用于向Servlet容器中添加springSessionRepositoryFilter。

    publicclass SpringSessionInitializer extends AbstractHttpSessionApplicationInitializer {

    }

    现在我们就基本配合完了,现在我们对上面这两段代码就行详解,首先我们带的疑问@EnableRedisHttpSession中到底做了什么操作,AbstractHttpSessionApplicationInitializer 的实现类为什么没有重写任何方法。

在步骤1中我们添加了@EnableRedisHttpSession注解并通过@Bean注解注册了一个RedisConnectionFactory到Spring容器中。在@EnableRedisHttpSession注解通过Import,引入了RedisHttpSessionConfiguration配置类。该配置类通过@Bean注解,向Spring容器中注册了一个SessionRepositoryFilter(SessionRepositoryFilter的依赖关系:SessionRepositoryFilter --> SessionRepository --> RedisTemplate --> RedisConnectionFactory)。

注意图中圈红的部分

注意圈红的部分

步骤2中AbstractHttpSessionApplicationInitializer 类不需要重载或实现任何方法,它的作用是在Servlet容器初始化时,从Spring容器中获取一个默认名叫sessionRepositoryFilter的过滤器类(之前没有注册的话这里找不到会报错),并添加到Servlet过滤器链中

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表