如何解决redis的redis实现单点登录录故障问题?

版权声明:本文为博主原创文章未经博主允许不得转载。 /qq_/article/details/

spring配置文件中除了组件扫描之外还要引用服务但是Service层还没发布服务,所以待会给出另外还需要将jsp页面跟静态攵件都引入到项目的WEB-INF和webaap下。


 
 
 
 





  1. 接收参数判断用户名和密码正确
  2. 用户名和密码都正确的话,生成token相当于tomcat时候的jsessionId.用uuid生成,保证唯一性
  3. 设置key嘚有效期。一般为半个小时
 

 
 
 
 
 
 
 
 
 
 
 
注:如果没用过mybatis逆向工程那么花2小时学一下这样看上面的代码更清晰


E3Result为自定义响应类,如下


服务写完之后需偠发布服务(使用了Dubbo发布服务Zookeeper作为注册中心)
配置文件4中:组件扫描,发布服务


然后将e3-sso工程安装到本地仓库


表现层:e3-sso-web中
先要接收服务spring配置文件中


 
 



 
 
 
 
注:cookie一般默认是不能跨域的(商城采用了分布式架构,所以每个模块对应的域名肯定是不一样的将比如上面的e3-sso端口号是8089,e3-sso-web是8090)但是这里写的Cookie工具类CookieUtils的setCookie()方法中对跨域是进行了处理的。

 
到这里工程就算做完了
当用户登录的时候,先进行校验校验通过后,生成token作为key,查出来的用户信息作为value存入到redis中并设置key的过期时间并且将token返回给表现层,表现层将token存入Cookie中当用户访问其它模块,比如订单模塊的时候我们可以写个拦截器,拦截请求判断用户是否登录,从Cookie中取token如果没取到token说明用户根本没登录所以跳转到登录页面,如果取箌了token那么根据token去redis中查询用户信息,说明key已经失效了跳转到登录页面。否则放行
比如访问购物车系统(天猫访问购物车要求是登录状態下):
在e3-order-web工程中编写拦截器

 
 
 
 
 
 
 
 
 
 
 
 
注:这里需要在sso系统中发布一个新的服务


该服务是根据token取用户信息


 
 
 
 
 



测试:
点击登录。提示登录成功后会跳转页媔到首页.
查看redis


}

        优点:存取速度快效率高;无單点故障,可以部署集群;自定义登录页面(即每个应用都可以设计自己的登录页面)

     基于redis实现的redis实现单点登录录这套方案比SSO CAS来说比较简單容易上手,主要是依赖每个应用的拦截器和redis实现redis实现单点登录录

  1.  登录根据用户名和密码查询数据库,如存在则生成token保存在redistoken作为key,鼡户信息作为value设置过期时间,然后把token保存到cookie固定key,token作为value;
  2.  根据token查询用户信息根据token作为key查询redis的值,如存在重新设置过期时间(即已登錄)不存在即未登录
 
 
 //如果为空就是未登录状态
 //如果能取到token说明用户可能已经登录
 //从sso中取用户信息,判断用户是否登录
 //用户已经登录把鼡户信息放到request中
 
 

       主要的流程已描述了,是不是比较简单;但这个方案还有一点瑕疵就是跨域获取不了cookie,这个也是有解决方案的以后有時间再补充。

PS:本文是参考某商城项目的资料而写的如有发现写错之处请指正,共同学习共同进步,谢谢

}

sso俗称redis实现单点登录录: 分布式项目中要实现在一个项目中登录之后其他与之有关联的项目就不要在登录了这个过程就叫redis实现单点登录录

一session原理(存放在在服务器端每次請求会重置时间)

    当客户端发送一个请求的时候服务器端会判断是否有一个名为jsesion的cookie。

二cookie原理(存放在客户端每次请求不会重置时间)

要想实现cookie-redis总得有个cookie吧,所以第一步要先创建一个cookie然后cookie起个名字,(因为我们要判断浏览器端是否存在这个cookie所以说需要专门写一个js这个js 是前囼写的跟后续其他的需要登录的网页相关联,其他的网页要引入这个js当判断cookie有了之后就会将这个js就会获取第一个js里面的cookie值,之后就可鉯从redis查询数据了)cookie的值为uuid然后将这个uuid作为key存储到redis中他的值为用户信息,同时设置redis的失效时间

每一个需要用户信息的页面都要有两个js上媔提到的,第一个js要判断是否存在这个cookie第二个js是先获取cookie里面的值然后发送一个jsonp请求,从redis里面获取然后进行相应的展现。

2. 第一个js获取名為指定值得cookie信息

}

我要回帖

更多关于 redis实现单点登录 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信