up:: SpringCloud之管理员过滤器开发
拓展阅读: Spring Cloud Gateway 中 session 共享
先在user模块进行session保存,即登陆信息
打开user模块的文件配置:
在网关模块进行session的发送
说明:
@EnableZuulProxy注解,用于引入zuul代理,实现zuul的路由转发功能。
@EnableRedisHttpSession,用于指定redis管理session。这里我们指定了redisFlushMode为立即刷新,防止因为redis刷新缓慢,导致session信息无法获取
配置:sensitiveHeaders:(英文不好害死人。)网上查了很多zuul的session共享问题,都说设置sensitiveHeaders属性,还有列出源码的,经过分析和度娘翻译, sensitive(敏感的),加上源码注释,可以知道,zuul默认情况下的sensitiveHeaders(敏感头),包含”Cookie”/”Set-Cookie”/”Authorization”三个头,分别 是cookie、权限头部分,zuul认为这些头是敏感的,默认不会再路由中携带,如果我们是内部服务路由,就可以覆盖sensitiveHeaders,指定其他值覆盖掉,让其 可以将cookie传到下一路由处,即可。
可以通过springsesion+redis的方式,根据客户端的cookie中的sessionid获取保存在redis中的该session的其它信息,如用户名等。从而实现与其它应用共享session信息。
举个例子:一个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信息的共享。
添加主启动类注解
测试
删除此键后,再次点击更新签名: