关于单点登录

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)第一种解决方案就是配置tomcatsession共享,配置tomcat集群。Tomcat配置好集群后,会不停的向集群中其他的tomcat广播自己的session信息。其他的tomcatsession同步。可以保证所有的tomcat-session中的内容都是一致的。它的优点就是不用修改代码就可以实现session共享。缺点是tomcat是全局session复制,集群内每个tomcatsession完全同步(也就是任何时候都完全一样的),在大规模应用的时候,用户过多,集群内tomcat数量过多,session的全局复制会导致集群性能下降,因此,tomcat的数量不能太多,5个以下为好,而且不能解决分布式工程的session共享问题。例如支付宝和淘宝单点登录的问题。(2)第一种解决方案就是实现单点登录系统,提供服务接口。把session数据存放在redisRedis可以设置key的生存时间、访问速度快效率高。优点:redis存取速度快,不会出现多个节点session复制的问题,效率高。还能解决分布式工程的session共享问题。

以上是关于关于单点登录的主要内容,如果未能解决你的问题,请参考以下文章

关于cas单点登录拒绝连接的问题...................

关于单点登录第一天接触之我见

关于单点登录

关于sso单点登录以及通过路径直接访问Servlet

关于单点登录SSO那些事儿

关于研究生教务各系统实现单点登录的通知