场景:假设一个用户将自己的登录信息提交到后台,如果session保存的信息分布在多台机器上,并且不共享,那么可能导致用户的登录信息出现短暂的丢失,为什么这样讲,因为用户访问服务器中间还要经过负载均衡服务器,负载均衡采用轮询的方式转发用户的登录请求。有可能访问到的那台机器用户恰好没有往服务器提交信息,导致信息出现短暂性丢失。这时一般有两种解决方案。
一.配置session集群(也就是tomcat服务器集群),让多台服务器共享同一个session并且同步,那么用户的登录信息就不会丢失。但是随着用户数量的增加,集群的性能就会下降
建议在5台一下的场景使用。
二.搭建单点登录系统,向外提供服务接口,将session数据存储在redis中,redis中的key可以设置信息的过期时间,而且访问速度快,效率高。模拟用户登录与查询订单的流程。
1.用户向sso系统发起登录请求 2.系统跳转登录界面 3action接收用户的参数 4后台根据用户名从数据库中查密码 5.如果密码正确,生成一个token(令牌),并将用户的信息保存到redis中,设置过期时间 6返回登录成功的界面 ,将token写入cookie 7用户访问订单系统 ,请求查询订单 8从cookie中取token查询,调用sso单点登录系统的服务,根据token查询用户的信息 9 接收token,从redis中查询token的值是否存在或者是否过期,如果有效,直接返回订单信息。
sso单点登录系统是解决企业业务整合的比较流行的方案之一,用户可以一次登录,可以访问多个不停的业务系统而不需要重新登录。而且可以通过redis解决分布式环境下session共享的难题。仅代表个人的一些见解,希望有需要的一起学习共同进步!