本篇文章为大家展示了弹簧引导/弹簧会话/复述的分布式会话共享如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
分布式Web网站一般都会碰到集群会话共享问题,之前也做过一些Spring3的项目,当时解决这个问题做过两种方案,一是利用nginx,会话交给nginx控制,但是这个需要额外工作较多;还有一种是利用一些tomcat上的插件,修改tomcat配置文件,让tomcat自己去把会话放到复述,Memcached/DB中去。这两种各有优缺,也都能解决问题。
但是现在项目全线弹簧引导,并不自己维护tomcat,而是由春天去启动tomcat。这样就会有一个问题:在服务器上并不存在一个持久存在的tomcat程序,这样也无从去修改tomcat的配置文件了。经过了一番搜索,发现春果然对这个问题有自己的解决方案,那就是春季。
,春季是通过过滤器实现的会议共享,具体原理可以自己去官网查,这里只说一下如何配置。整个项目基于弹簧引导,如果不是启动项目就需要自己去调整了。
项目需要先准备一个复述,服务,在本地启动一个即可。还需要有一个已经使用会话但是未做会议共享春天的启动项目,下面我就讲述一下如何给这个项目加上基于复述的会议共享。
, <强>引入依赖强>
首先,要在maven中加入以下依赖:
& lt; dependencies> & lt; !——……——比; & lt; dependency> & lt; groupId> org.springframework.session & lt; artifactId> spring-session & lt; version> 1.2.2.RELEASE & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-redis & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework.session & lt; artifactId> spring-session-data-redis & lt; version> 1.2.2.RELEASE & lt; type> pom & lt;/dependency> & lt;/dependencies>
这些就是春季和复述,相关的依赖。
<>强,配置复述,强>
在项目目前在使用的属性文件中,加入如下配置:
spring.redis.host=localhost spring.redis.password=秘密 spring.redis.port=6379
主机就是复述地址,密码为密码,端口为端口号。
<强>,春天配置强>
在项目的目录中,创建一个配置。java文件(名称随意)
@ configuration @EnableRedisHttpSession 公共类配置{ @ bean 公共JedisConnectionFactory connectionFactory () { 返回新JedisConnectionFactory (); } }
@EnableRedisHttpSession这个注解就是最重要的东西,加了它之后,春天生产一个新的拦截器,用来实现会话共享的操作,具体实现这里暂不展开。而配置的这个Bean,则是让春根据配置文件中的配置连到复述。
如果不使用安全、下面的几步就不用做了,这个类中配置的豆也不用配置。
<强> spring Security配置强>
在项目中添加该类:
公共类SecurityInitializer延伸AbstractSecurityWebApplicationInitializer { 公共SecurityInitializer () { 超级(SecurityConfig。类,Config.class); } }
super()的第二个参数,就是我们上面的那个配置文件。添加这个配置文件后,Spring安全就会把会话放到复述中,这样基于Spring Security的项目也可以实现会话共享了。
<强>初始化配置强>
这一步写法异常简单,还是创建文件:
公共类初始化器扩展AbstractHttpSessionApplicationInitializer {}
就这样,继承一个类即可。
,大功告成!简单的超乎想像,这就是弹簧引导的优势所在。下面我们来自己登录一下,看看Spring Security是否把会话放到复述中。
(登录过程我就不讲了,,在自己项目中调用一下安全的登录即可)
然后用redis-cli连接到复述,执行键*
会看到如下:
你会发现复述,里多了一堆以弹簧:会话:* * *为关键的东西,这样就说明Spring Security确实把会话放到了我们配置的复述中。这样就可以实现会话共享了。