欢迎大家来到IT世界,在知识的湖畔探索吧!
spring session作用:
说白了就是对session就行了一个第三方的管理。解决了session共享的问题。
为什么要使用spring-session:
在我们早期的工程中我们的工具比较简单,采用的是一个war包的形式所有的文件都是在一个工程中这样我们就可以直接通过servlet容器创建与管理,随着网站访问的人越来越多,服务器的压力越大的时候,我们可能就会采用集群的方式管理项目(把同一工程复制多份放到不同的不服务器),这样又会带来问题。所以我们会采用Nginx+tomcat的形式处理。我们就可以通过ip_hash来保证session。随着业务的增大我们会对项目进行拆分,把各个业务模块进行拆分部署(分布式)。这时候我们就需要通过redis/memcached等来进行session的管理。
具体步骤:
-
编写一个配置类,用来启用RedisHttpSession功能,并向Spring容器中注册一个RedisConnectionFactory。
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 7200)
publicclass RedisHttpSessionConfig {
@Bean
public RedisConnectionFactory connectionFactory() {
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
return connectionFactory;
}
}
-
编写一个一个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过滤器链中
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/34500.html