弹簧引导/弹簧会话/复述的分布式会话共享如何解决

  介绍

本篇文章为大家展示了弹簧引导/弹簧会话/复述的分布式会话共享如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

分布式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会话/复述的分布式会话共享如何解决

你会发现复述,里多了一堆以弹簧:会话:* * *为关键的东西,这样就说明Spring Security确实把会话放到了我们配置的复述中。这样就可以实现会话共享了。

弹簧引导/弹簧会话/复述的分布式会话共享如何解决