前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >传统的登录系统与单点登录SSO系统

传统的登录系统与单点登录SSO系统

作者头像
企鹅号小编
发布2018-01-10 11:29:25
1.8K0
发布2018-01-10 11:29:25
举报
文章被收录于专栏:企鹅号快讯

正文共:1783字3图预计阅读时间:5分钟

传统的登录方式

kiri开发了一个项目,这个项目只有一个web工程,所以他在做系统登录的时候呢?是这样做的:

“当用户进行登录的时候,他把登录请求交给LoginController,这时候就会去数据库中根据用户传来的用户名查询查询密码,判断密码是否正确,如果密码正确的话就会把用户信息放到session里,如果不正确就提示用户密码不正确。

当用户在该系统中需要访问用户相关信息的时候,那么这个时候就可以直接到session中判断用户是否登录,如果从session获取到有该用户的信息,那么就直接展示就可以了,不需要再次登录了。”

kiri突然觉得自己很是牛逼,就开始吭哧吭哧的写代码了...不到半个小时kiri就写完了,然后部署好了系统就出去happy了!

后来,系统并发量大了起来,在一个Tomcat中已经无法支撑了,这时候kiri开始做起集群来,把web工程部署多了一台Tomcat,然后用nginx做负载均衡。

不到半小时kiri就部署完了,然后又出去happy去了...

但是正当kirihappy的时候,许多用户反映在这个系统里需要多次登录,有时候登录了还需要再次登录!kiri有点纳闷,怎么会这样,于是只能扫兴的回去打开电脑看看怎么回事!

kiri看了5分钟后发现了问题:

原来,把web部署在不同的Tomcat上,他们的session是不同的,也就是每个tomcat都有她自己独立的session。当用户登录系统的时候,nginx将用户请求代理到第一个tomcat进行登录,将用户信息存放到session中,当用户再次请求系统的时候,nginx可能会将用户的请求代理转发给第二个tomcat进行处理,这个时候第二个tomcat的session并没有该用户的信息,所以就需要用户去登录!

于是kiri就开始配置tomcat,让它们之间的session进行共享,也就是当tomcat的session发生改变的时候,就会广播给配置好的另一个tomcat,让它们的session保持同步!

这样子用户就不需要再进行多次登录了,kiri搞完之后又出去happy了...

SSO单点登录

kiri团队后来做了个比之前大一点的系统,这个系统是采用分布式系统架构的,kiri这次负责的用户相关的功能模块。kiri发现系统被分成了多个子系统,这些子系统将来可能会被部署到多个不同的服务器上,如果采用之前的session共享进行用户登录的话,会非常占用系统资源,而且非常影响性能!

于是kiri就发现了原来有个叫做单点登录的玩意,上Google搜了一下

发现维基百科对它的定义是这样的:

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。

发现这正是他想要的!

于是kiri就创建了一个子模块,叫做SSO,这个模块就是专门来管理用户的登录的,它将用户的session数据用Redis存放,因为Redis可以全局管理数据,可以设置key值的生存有效期,而且访问效率很快!

单点登录实现流程

kiri展开了思路:

用户在每个系统中对用户的登录请求会发送给SSO系统,SSO系统显示登录页面,在SSO系统中接收用户名和密码;

根据用户名密码去查询数据库是否存在,如果存在就会生成Token,这个Token对应的便是存放到Redis中的key,用户信息就是对应的Value,然后存放到Redis中,接着设置登录有效期;

接着返回登录成功,并将token写入cookie中,这个时候再判断是否有回调的URL,如果有就重定向到用户需要的页面,没有就跳转到门户首页;

当用户在另一个系统中需要请求到用户信息的时候,就会通过拦截器判断用户中的请求的cookie中的token是否在redis中有数据,如果不存在就会返回登录url,如果存在说明已经登录,那么就可以刷新登录有效期,并将用户信息进行返回!

kiri搞完之后发现不错,Redis存取速度快,不会出现多个session共享影响性能问题。更加高效,所以认为创建一个SSO系统来做单点登录是很有必要的!

本文来自企鹅号 - 肯定会媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 肯定会媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档