原理:就是在一个网站的根地址里添加一个cookie,cookie的value就是用户登录的sessionid,将这个sessioid作为redis的key,用户的信息作为value,存储在redis里,这样该网站所有的子域名都可以获取到这个cookie,然后根据cookie里的sessionid去redis里读取用户的信息。

    @RequestMapping(value = "login.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<User> login(String username, String password, HttpSession session, HttpServletResponse httpServletResponse){ServerResponse<User> response = iUserService.login(username,password);if(response.isSuccess()){CookieUtil.writeLoginToken(httpServletResponse,session.getId());RedisShardedPoolUtil.setEx(session.getId(), JsonUtil.obj2String(response.getData()),Const.RedisCacheExtime.REDIS_SESSION_EXTIME);}return response;}
    @RequestMapping(value = "get_user_info.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<User> getUserInfo(HttpServletRequest httpServletRequest){String loginToken = CookieUtil.readLoginToken(httpServletRequest);if(StringUtils.isEmpty(loginToken)){return ServerResponse.createByErrorMessage("用户未登录,无法获取当前用户的信息");}String userJsonStr = RedisShardedPoolUtil.get(loginToken);User user = JsonUtil.string2Obj(userJsonStr,User.class);if(user != null){return ServerResponse.createBySuccess(user);}return ServerResponse.createByErrorMessage("用户未登录,无法获取当前用户的信息");}
public class CookieUtil {private final static String COOKIE_DOMAIN = ".happymmall.com";private final static String COOKIE_NAME = "mmall_login_token";public static String readLoginToken(HttpServletRequest request){Cookie[] cks = request.getCookies();if(cks != null){for(Cookie ck : cks){log.info("read cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());if(StringUtils.equals(ck.getName(),COOKIE_NAME)){log.info("return cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());return ck.getValue();}}}return null;}public static void writeLoginToken(HttpServletResponse response,String token){Cookie ck = new Cookie(COOKIE_NAME,token);ck.setDomain(COOKIE_DOMAIN);ck.setPath("/");//代表设置在根目录ck.setHttpOnly(true);//单位是秒。//如果这个maxage不设置的话,cookie就不会写入硬盘,而是写在内存。只在当前页面有效。ck.setMaxAge(60 * 60 * 24 * 365);//如果是-1,代表永久log.info("write cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());response.addCookie(ck);
}public static void delLoginToken(HttpServletRequest request,HttpServletResponse response){Cookie[] cks = request.getCookies();if(cks != null){for(Cookie ck : cks){if(StringUtils.equals(ck.getName(),COOKIE_NAME)){ck.setDomain(COOKIE_DOMAIN);ck.setPath("/");ck.setMaxAge(0);//设置成0,代表删除此cookie。log.info("del cookieName:{},cookieValue:{}",ck.getName(),ck.getValue());response.addCookie(ck);return;}}}}}

基于 redis 的单点登录原理相关推荐

  1. 基于Redis的单点登录

    单点登录的使用流程 单点登录的概念: 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问 ...

  2. 10.单点登录原理及JWT实现

    单点登录原理及JWT实现 一.单点登录效果   首先我们看通过一个具体的案例来加深对单点登录的理解.案例地址:https://gitee.com/xuxueli0323/xxl-sso?_from=g ...

  3. cas单点登录原理碎碎念

    2019独角兽企业重金招聘Python工程师标准>>> 也许有一天,你去面试,当面试官问你做cas的经验的时候,你会怎么描述? cas单点登录的原理? 单点登录是分为基于sessio ...

  4. cas跨域单点登录原理_CAS实现SSO单点登录原理

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  5. CAS教程-第一篇-CAS单点登录原理解析

    转载自:http ://www.cnblogs.com/lihuidu/p/6495247.html 1,基于饼干的单点登录的回顾 基于Cookie的的单点登录核心原理: 将用户名密码加密之后存于饼干 ...

  6. cas实现单点登录原理

    1.基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中 ...

  7. CAS单点登录原理简单介绍

    1. SSO简介 1.1 单点登录定义 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统. ...

  8. 【No.1】基于Cookie的单点登录(SSO)

    2019独角兽企业重金招聘Python工程师标准>>> 这篇主要说明基于Cookie的单点登录实现,以及Cookie的一些特性以及使用说明. 1.Cookie是什么,如何工作的 在程 ...

  9. 基于Cookie的单点登录(SSO)系统介绍

    基于Cookie的单点登录(SSO)系统介绍 SSO的概念: 单点登录SSO(Single Sign-On)是身份管理中的一部分.SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保 ...

  10. CAS单点登录原理解析及相关配置

    1.基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中 ...

最新文章

  1. 中兴核心网服务器笔记本电脑,中兴通讯5G Common Core
  2. python安装modify setup选哪-python 之禅 import this
  3. mysql 服务器优化_如何对MySQL服务器进行调优
  4. LVS DR模式 负载均衡服务搭建
  5. 【OpenCV入门学习笔记1】:Mat对象的指针操作和掩膜操作
  6. 用二维数组实现矩阵转置
  7. Windows Media Services 9 系列常见问题解答
  8. Windows下Redis的使用
  9. 数据挖掘二手车价格预测 Task05:模型融合
  10. 外联样式表添加到html中,CSS联样式表之内联式、外联式和嵌入式
  11. winform中通过FileStream实现将文件上传
  12. HTTP Get与Post的区别
  13. WinCC flexible的版本与安装移植软件
  14. html的重置按钮reset无反应,reset() 按钮没有反应???
  15. (七)数字后端之形式验证
  16. 域策略(4)——设置统一锁屏壁纸(此策略仅适用于企业版、教育版和 Server SKU版)
  17. python打开其他应用程序错误_Python应用程序错误(Udacity)
  18. sd卡数据恢复源码android,SD卡受损数据恢复图文详解
  19. java英文日期格式化_java如何把英文的日期格式改成数字化的
  20. OJ刷题之《寄居蟹与海葵》

热门文章

  1. 计算机硬件专业实习日志,计算机维护实习日记总汇
  2. VS2010SP1中文版安装问题
  3. U盘快捷方式病毒修复
  4. mysql 仓储系统规划与设计,仓库管理系统的设计与实现.doc
  5. 常用元器件使用方法4:一种Micro-SIM卡连接器的使用方法
  6. win7自带的xps viewer很好用
  7. postgresql客户端远程连接
  8. 下行文格式图片_下行文标准模版
  9. (1)C# 创建控制台应用程序
  10. 如何卸载 adobe creative cloud?