shiro框架---多项目登录访问共享session的实现

shiro框架---多项目登录访问共享session的实现

shiro框架—多项目登录访问共享session的实现
公司需要这样的需求:
  有两个项目master 主项目、suiteone 项目,两个项目各自由shiro 安全框架管理,当不能登录时,都无法访问,但当登录了其中一个,再访问另一个的时候不再需要登录即可访问。 
  如果想看为什么需要共享session ,可以去看我这篇文章。shiro框架—关于多项目之间验证为什么需要共享session

https://blog.csdn.net/wohaqiyi/article/details/81342741

关于实现多项目共享session的逻辑介绍
  其实在上边的链接里我已经说明了,但是怕大家不去看,所以我就又复制到了这里: 
先来说一下我的理解 ,如下:
shiro框架---多项目登录访问共享session的实现_第1张图片

 

上图中master 项目为主项目,登录页即在这个项目中,suiteone 、suitetwo 为两个从项目,当两个从项目有请求时,如果没有登录的时候,都会打到master 项目的登录页上。共享session 采用的是redis 存储。

上图的步骤如下:
浏览器请求master 项目,第一次请求的时候,也是会带着浏览器中的cookie 去请求,当然第一次去redis 里肯定找不到对应的session,会通过⑤进入到登录页。
当在登录页输入完正确的账号密码后,才能登录成功,否则仍会回到⑤。
在这一步的时候,会将登录成功后的session ,根据它,将生成sessionId串 ,并传到前端浏览器中,浏览器以cookie 存储。
同时将第③步中生成的session 存储到redis 中。
当前这里,不只是当登录失败的时候,会进入到登录页中,当浏览器长时间没有访问后台(每次浏览器访问后台,其实都会刷新session 的过期时间expireTime),导致session 超过时,也会进入到该步中。
当浏览器请求suiteone 、suteTwo 这两个从项目时,肯定也是将当前浏览器中的所有的cookie 设置到request headers 请求头中。
根据传入的sessionId串 到共享的redis 存储中匹配。
如果匹配不到,则会跳转到master 项目的登录页,如果匹配成功,则会访问通过。
  以上描述的并不难,大家也都会想到,那么如何将扯了这么多的淡 真正更简单的,落地实现才是大家关注的。

多项目通过redis共享session的步骤
  关于该项目已在GitHub上传,有兴趣的可以下载下来瞧瞧,GitHub项目地址

1、shiro 共享session 的切入点,下图是shiro的验证流程
shiro框架---多项目登录访问共享session的实现_第2张图片

 

你可能感兴趣的:(shiro框架---多项目登录访问共享session的实现)