关于单点登录
Posted Java知识分享交流
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于单点登录相关的知识,希望对你有一定的参考价值。
用户只要登陆一次就可以访问所有相互信任的应用系统,比如在淘宝页面就可以进入天猫。还有单点登陆系统可以解决session的共享问题,session的共享问题分为集群的session共享和分布式的session共享,他们的主要区别是,是多个系统还是单个系统。
如果是单个系统的那么就是集群的session共享,只要的解决方案有:
(1).cookie携带,但是这样不安全,而且cookie的大小是有限制的 (2).session的绑定,比如说在nginx上做一个ip_hash,让同一个ip访问指定的服务器,这样也可以解决,但是会发生单点故障。体验性不好 (3).session的复制(tomcat实现,其实就是修改一个配置文件。由tomcat自己去做session的复制。如果机器少可以tomcat复制压力小,但是机器多的时候就会给服务器造成压力)(4).第三方保存(redis{String[key,value ],可以对key设置生存时间}+cookie)
如果是多个系统,就是分布式session共享问题:
如果是分布式,比如购物车和订单系统,当用在购物车系统登录后在购物车中进行结算操作,这时候就会调用订单系统,就必须要知道用户的信息。这个过程就是分布式的session共享问题,我们采用的是单点登录系统实现的。其实单点登录系统就是“redis+cookie”实现的。当用户登录后,单点登录系统会将用户的身份信息,存放到redis中,并且给客户端种一个token令牌,这样任何一个需要登录的系统,主要配置一个拦截器,然后用客户提交的token调用单点登录系统换取用户信息,从而完成了分布式的seesion共享问题。
为什么使用单点登录:
为了避免用户重复的登陆,和session共享的问题(1)第一种解决方案就是配置tomcat的session共享,配置tomcat集群。Tomcat配置好集群后,会不停的向集群中其他的tomcat广播自己的session信息。其他的tomcat做session同步。可以保证所有的tomcat-session中的内容都是一致的。它的优点就是不用修改代码就可以实现session共享。缺点是tomcat是全局session复制,集群内每个tomcat的session完全同步(也就是任何时候都完全一样的),在大规模应用的时候,用户过多,集群内tomcat数量过多,session的全局复制会导致集群性能下降,因此,tomcat的数量不能太多,5个以下为好,而且不能解决分布式工程的session共享问题。例如支付宝和淘宝单点登录的问题。(2)第一种解决方案就是实现单点登录系统,提供服务接口。把session数据存放在redis。Redis可以设置key的生存时间、访问速度快效率高。优点:redis存取速度快,不会出现多个节点session复制的问题,效率高。还能解决分布式工程的session共享问题。
以上是关于关于单点登录的主要内容,如果未能解决你的问题,请参考以下文章