单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的

1、web单系统应用

早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的,所有的功能,所有的业务,后台管理,门户界面,都是由这一个war来支持的,这样的单应用,也称之为巨石应用,因为十分不好扩展和拆分。

在巨石应用下,用户的登录以及权限就显得十分简单,用户登录成功后,把相关信息放入会话中,HTTP维护这个会话,再每次用户请求服务器的时候来验证这个会话即可,大致可以用下图来表示:

如上图,这个会话就是session,维护了用户状态,也就是所谓的HTTP有状态协议,我们经常可以在浏览器中看到JSESSIONID,这个就是用来维持这个关系的key

这样,每次请求的时候只需要用拦截器来拦截当前用户的登录状态以及授权状态即可。

如果引入集群的概念,这个单应用可以分别部署在3台tomcat上,使用nginx来实现反向代理, 此时,这个session就无法在这3台tomcat上共享,用户信息会丢失(这里不考虑粘性和非粘性的session,我们不推荐做)

2、多应用构建的分布式集群系统

从巨石应用发展至今,我们有SOA,有微服务,其道理都是一样的,都是进行了业务拆分来分解为多个系统,多个系统完全解耦,可以分别部署在不同的服务器上,项目之间通过rpc或者restful来实现相互通信,举个栗子:

order.abc.com

cart.abc.com

service.abc.com

有这么3个系统,部署在不同的二级域名下,那么用户每次登陆不同的系统是不是都要登录呢?这样是不合理的,我们不能因为系统的复杂度使得用户也变得复杂,对于用户来说,一套产品就是一个完整的应用。登录一次即可,没有必要多次登录。

按照之前所说的session就不适用了,在这个地方我们就引入了单点登录,保持用户与服务端之间的无状态协议,生成token,使用token这个令牌穿梭在各个系统。

那么这个token放在浏览器cookie即可,失效时间需要和redis的expire一致,根据需求我们可以实现用户登录一次就可以在任何系统中使用,其次用户账户在别的地方登录后,上一个用户则被挤出。

(需要注意的是,这个cookie作为第一方cookie需要对二级域名进行设置,如果要跨域的话需要设置第三方cookie或者使用JWT来做,这个就不多说了)

3、单点登录SSO(Single Sign On)

对于分布式系统来说,我们需要sso这样一个用于单点登录的系统,可以独立部署在一个web服务器内,比如域名为 login.abc.com,其他所有web服务上的登录都可以通过这个sso来登录,app也可以调用登录

如果,所有的token都由sso来管理,这个token在浏览器可以存储在第一方cookie或者第三方都行,在ios或者安卓上也能够保持,每次访问服务的时候放入headers中,让拦截器进行验证即可。同时,这个token也可以扩展用来做权限。

4、手机端的单点登录

这个不难理解,就像微信那样,同一个用户只能在同一个手机端上登录,这个是用token+缓存就能实现,套用上面所说的拦截器,可以不需要写很多代码就能实现。

5、代码实现以及部署

关于这个我会在这段时间抽空写个简单小项目放在github上开源。

最新文章

  1. linux下打开、关闭tomcat,实时查看tomcat运行日志
  2. J2EE项目中后台定时运行的程序
  3. iOS-国家气象局-天气预报接口等常用接口
  4. Tomcat8访问管理页面localhost出现:403 Access Denied
  5. PayPal网站付款标准版(for PHP)
  6. Mac 版 QQ 可直接访问 iPhone 的相册 ?!
  7. 3223: Tyvj 1729 文艺平衡树 - BZOJ
  8. 运算符 - PHP手册笔记
  9. java synchronized 线程同步机制详解
  10. (Alpha)个人总结
  11. Zabbix JMX监控之ActiveMQ
  12. (三十二)DatePicker和自定义键盘
  13. Frist one
  14. jGrid + echart 后台管理
  15. soapUI 使用soapUI测试http+json协议接口简介
  16. Mysql update case
  17. package.json中配置浏览器
  18. 机器学习入门-贝叶斯构造LDA主题模型,构造word2vec 1.gensim.corpora.Dictionary(构造映射字典) 2.dictionary.doc2vec(做映射) 3.gensim.model.ldamodel.LdaModel(构建主题模型)4lda.print_topics(打印主题).
  19. [Linux] 关于Unix哲学
  20. 导入google地图

热门文章

  1. XMLHttpRequest HTTP请求的返回码为0 http status = 0
  2. Java DESede 加解密("DESede/ECB/PKCS5Padding")
  3. eclipse svn新增文件不显示在文件列表,只有修改文件可以提交!
  4. mysql日期/时间转换为字符串
  5. 转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架
  6. 【转载】Mysql主从复制、和MySQL集群(主主复制)
  7. 致Play Framework开发者们的一封信
  8. c++ ado 程序终止时崩溃
  9. Vue.js——60分钟快速入门 开发· webpack 中文文档
  10. 关于ARP协议