系统间账号认证系统同步方案
基础原理:(基于Web)
浏览器在个请求传递cookie到服务器,服务器对cookie增删改查的操作, 写入JSessionId实现与服务器Session的绑定,保持会话
单机情况下:一个域名,对应一个cookie,对应一个JsessionId,与一个服务器Session会话
基于原理解决方案需要解决两个问题:
1. Cookie在不同域名(系统)间的传递问题
2. 服务器Session在不同服务器
问题1的解决方案:
cookie中的数据有三个属性:domain、path、name。cookie新增和删除,没有修改选项,name相同,domain以及path不同,当做不同的cookie来处理
又衍生出了两种情况:
在同一个域名以及子域名下面的处理方式:使用domain绑定顶级域名
在不同域名下面的系统的处理方式:通过sso的模式,传递ticket,验证ticket获取用户信息,生成自己的sessionId到cookie中
问题2的解决方案:
部署在同一台服务器:使用堆外内存,磁盘缓存来实现:ehcache
部署在不同服务器:使用redis、memcache缓存来实现
实现方式:
框架:spring-session、shiro-SessionManager模块、使用redis客户端
自研:修改实现JavaEE关于Session的增删改查,实现分布式回话
上述问题比较麻烦的就是不同域名下系统的解决方案:单点登录
底层方案:
JavaEE接入Cas的客户端和服务端实现手动实现单点登录
使用框架:
spring-cas
shiro整合cas
其他方式:
零侵入整合业务系统:https://www.cnblogs.com/baibaomen/p/sso.html
Tomcat容器其实实现了对应的Cookie的配置,但是过于依赖容器,在代码中实现,而非在运维层面上实现是更好的选择。
参考资料:
单点登录时序图:https://www.cnblogs.com/baibaomen/p/sso-sequence-chart.html
github单点登录资料:https://github.com/baibaomen/BaibaomenSsoLesson
域名之间的cookie共享情况:https://segmentfault.com/a/1190000006932934?utm_source=tag-newest
JavaEE基础教程书籍:《JavaWeb整合开发王者归来》熟悉JavaEE基本对象以及基础流程以及原理,容器只是基础规范的实现