ZUUL单点路由与微服务的SESSION共享

本文介绍了Spring Cloud环境下如何利用Spring Session与Redis实现跨应用的会话(session)共享。通过在客户端植入包含sessionID的cookie,并利用Zuul作为网关进行会话信息的传递与同步,最终实现在不同微服务间共享用户登录状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几个基本概念

1、session建立在客户端与服务器端,客户端与zull、APP1、APP2 ...间的session都不同。

2、session创建在request.getSession()函数调用时,或者是推送第一个页面时(默认,也可以在jsp中输入<% @page session="false"%> 来关闭session的创建)。

3、cookie在客户端保留,用于记录与服务器的交互信息。服务器端通过response.addCookie(ck)向客户端植入cookie。较为常见的是给客户端植入sessionid,这样一定程度可以保证信息的安全。

4、cookie是不可跨域名的。而path属性决定允许访问Cookie的路径(ContextPath),在spring cloud中,一般将微应用的context-path设置到zuul路径的下一级别,例如zuul: /appzuul, app1的:/appzuul/app1,app2的:/appzuul/app2。这样在zuul上就可以读取app1和app2的cookie了。

5、spring-boot有一个坑,到了2.0以后,context-path在sevlet的级别之下了。server.servlet.context-path= /appzuul/app1

6、可以通过springsesion+redis的方式,根据客户端的cookie中的sessionid获取保存在redis中的该session的其它信息,如用户名等。从而实现与其它应用共享session信息。

7、举个例子:一个spring cloud应用,在app1单点登陆后创建session,其它应用不再需要登陆。具体来说,app1登陆后创建session,同时通过response.addCookie(ck) 将cookie织入到客户端,植入的内容为sessionId。此时客户端与app2还没有session,但可以在zuul的过滤中判断客户端是否有cookie。由于app1已经建立了session, 所以通过zuul时肯定有一个zuul可以识别出的cookie。拿到这个cookie的sessionid信息,去redis中查出其它信息。在路由给app2时将这些信息放到request的header中。app2在收到请求后,通过request.getHeader获取这些信息,然后创建信息的session,并把这些信息植入到新创建的session中,从而实现了session信息的共享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值