本发明涉及大数据技术领域,具体涉及一种基于redis跨域、跨语言的会话共享方法和系统。
背景技术:
spring-session提供了与httpsession的透明集成,允许以应用程序容器(即tomcat)中性的方式替换httpsession,它实现了集群会话、多个浏览器会话、restfulapi及与websocket的完美集成。
redis是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api。
nginx(enginex)是一款高性能和轻量级的http和反向代理服务,也是一个imap/pop3/smtp服务。
saml是一个基于xml的开源标准数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换。
目前在政府行业内,业务系统使用了多种语言的开发框架且业务系统各自存储会话信息,无法实现会话共享,不能满足用户在多个业务系统间切换访问。同时如果业务系统在跨域的情况下部署,尤其在使用多实例部署时,无法使用轮询的负载均衡策略来减轻服务端压力,造成在突发情况下一个实例宕机影响客户使用,用户体验差。
技术实现要素:
本发明的技术任务是提供一种基于redis跨域、跨语言的会话共享方法和系统,解决政府行业内各个业务系统间的单点及会话共享的问题,适用于跨域和对开发语言无限制的各个业务系统。
本发明解决其技术问题所采用的技术方案是:
一种基于redis跨域、跨语言的会话共享方法,该方法将用户登录会话信息统一存储于redis数据库内,以会话内码作为读取会话信息的唯一标识。可以改变政府行业内传统的业务系统各自存储会话、无法实现会话共享和采用多实例部署,无法使用轮询策略来实现负载均衡的现象,以此解决个别实例突发宕机,满足用户在基于安全策略的前提下,更加友好正常的进行多个业务系统间的切换访问。
进一步的,该方法的实施可以通过认证服务端、服务客户端和负载均衡三个方面的实施来体现,该方法的具体实现方式如下:
对于认证服务端:
基于spring-session集成方案配置修改;
合并spring-session的cookie和header策略,使其同时支持两种策略;
开发基于header策略的rest服务接口,供java以外的开发语言调用,达到会话共享的目的。
对于服务客户端:
服务客户端针对基于同域并且使用java开发语言的业务系统与基于跨域或使用java开发语言意外的业务系统分别提供不同的解决方案。
进一步的,对于负载均衡,基于nginx的轮询策略代理各自业务系统,以提高业务系统的健壮性。
具体的,所述基于spring-session集成方案配置修改的具体方式为:
引入spring-session-data-redis和lettuce相关jar包;
添入spring-session相关配置文件,并在web.xml内添加相应过滤器。
具体的,对于服务客户端,针对基于同域并且使用java开发语言的业务系统,采用基于spring-session的集成方案引入相关jar包和修改配置,使用cookie策略。
具体的,对于服务客户端,针对基于跨域或使用java开发语言意外的业务系统,首先通过基于saml的单点方式从认证服务端获取会话内码,以拦截器的形式拦截每次业务请求,然后携带会话内码调阅基于header策略的rest服务接口,以保持redis的会话活动并且验证该会话是否失效。
本发明还要求保护一种基于redis跨域、跨语言的会话共享系统,该系统将用户登录会话信息统一存储于redis数据库内,以会话内码作为读取会话信息的唯一标识,包括认证服务端、服务客户端和负载均衡模块。
具体的,所述该系统中的
认证服务端基于spring-session集成方案配置修改,然后合并spring-session的cookie和header策略,使其同时支持两种策略,最后开发基于header策略的rest服务接口,供java以外的开发语言调用,达到会话共享的目的;
服务客户端分别针对基于同域并且使用java开发语言的业务系统和基于跨域或使用java开发语言意外的业务系统提供不同的解决方案;
负载均衡模块基于nginx的轮询策略代理各自业务系统,以提高业务系统的健壮性。
具体的,认证服务端基于spring-session集成方案配置修改的具体方式为:
引入spring-session-data-redis和lettuce相关jar包;
添入spring-session相关配置文件,并在web.xml内添加相应过滤器。
进一步的,服务客户端
基于同域并且使用java开发语言的业务系统,采用基于spring-session的集成方案引入相关jar包和修改配置,使用cookie策略;
基于跨域或使用java开发语言意外的业务系统,首先通过基于saml的单点方式从认证服务端获取会话内码,以拦截器的形式拦截每次业务请求,携带会话内码调阅基于header策略的rest服务接口,以保持redis的会话活动并且验证该会话是否失效。
本发明的一种基于redis跨域、跨语言的会话共享方法和系统与现有技术相比,具有以下有益效果:
使用该方法或系统,可以改变传统业务系统不能在部署多实例时采用轮询策略问题,避免了单实例突发宕机而影响业务系统的正常访问;统一存储了不同业务系统间的会话,实现多个系统间的灵活切换,增强用户的体验感。
具体实施方式
下面结合具体实施例对本发明作进一步说明。
一种基于redis跨域、跨语言的会话共享方法,该方法将用户登录会话信息统一存储于redis数据库内,以会话内码作为读取会话信息的唯一标识。可以改变政府行业内传统的业务系统各自存储会话、无法实现会话共享和采用多实例部署,无法使用轮询策略来实现负载均衡的现象,以此解决个别实例突发宕机,满足用户在基于安全策略的前提下,更加友好正常的进行多个业务系统间的切换访问。
该方法针对java开发语言和非java开发语言提供不同的解决方案。该方法的实施可以通过认证服务端、服务客户端和负载均衡三个方面的实施来体现,该方法的具体实现方式如下:
一、对于认证服务端:
1、基于spring-session集成方案配置修改;
引入spring-session-data-redis和lettuce相关jar包;
添入spring-session相关配置文件,并在web.xml内添加相应过滤器;
2、合并spring-session的cookie和header策略,使其同时支持两种策略;
3、开发基于header策略的rest服务接口,供java以外的开发语言调用,达到会话共享的目的。
二、对于服务客户端:
服务客户端针对基于同域并且使用java开发语言的业务系统与基于跨域或使用java开发语言意外的业务系统分别提供不同的解决方案。
基于同域并且使用java开发语言的业务系统,采用基于spring-session的集成方案引入相关jar包和修改配置,使用cookie策略;
基于跨域或使用java开发语言意外的业务系统,首先通过基于saml的单点方式从认证服务端获取会话内码,以拦截器的形式拦截每次业务请求,然后携带会话内码调阅基于header策略的rest服务接口,以保持redis的会话活动并且验证该会话是否失效。
三、对于负载均衡:
基于nginx的轮询策略代理各自业务系统,以提高业务系统的健壮性。
最为本发明的另一个实施例,一种基于redis跨域、跨语言的会话共享系统,该系统将用户登录会话信息统一存储于redis数据库内,以会话内码作为读取会话信息的唯一标识,包括认证服务端、服务客户端和负载均衡模块。
该系统中的,
1、认证服务端基于spring-session集成方案配置修改,然后合并spring-session的cookie和header策略,使其同时支持两种策略,最后开发基于header策略的rest服务接口,供java以外的开发语言调用,达到会话共享的目的。
其中,认证服务端基于spring-session集成方案配置修改的具体方式为:
引入spring-session-data-redis和lettuce相关jar包;
添入spring-session相关配置文件,并在web.xml内添加相应过滤器。
2、服务客户端分别针对基于同域并且使用java开发语言的业务系统和基于跨域或使用java开发语言意外的业务系统提供不同的解决方案。
基于同域并且使用java开发语言的业务系统,采用基于spring-session的集成方案引入相关jar包和修改配置,使用cookie策略;
基于跨域或使用java开发语言意外的业务系统,首先通过基于saml的单点方式从认证服务端获取会话内码,以拦截器的形式拦截每次业务请求,携带会话内码调阅基于header策略的rest服务接口,以保持redis的会话活动并且验证该会话是否失效。
3、负载均衡模块基于nginx的轮询策略代理各自业务系统,以提高业务系统的健壮性。
本发明已经应用到了山东省国土综合管理云平台及南昌市国土综合管理服务平台建设中,实现了不同开发语言业务系统间的跨域、跨语言的会话共享集成;增加了用户体验度,提供了业务系统多实例间的健壮性。
通过上面具体实施方式,所述技术领域的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的具体实施方式。在公开的实施方式的基础上,所述技术领域的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。