单点登陆(Single Sign On)

在分布式的微服务架构中,存在多台服务器,在某一台服务器进行登陆后,多台服务器可同时检测到登陆状态

三种方式

①Session广播机制

实质为session的复制

②cookie+redis实现

将登陆后的数据放置到redis中,将其key存储到cookie中

③使用token是实现(令牌机制)

Token

按照一定的规则生成字符串,可包含用户信息:
JWT头信息+有效载荷(主体部分)+签名哈希(防伪标志)

将生成的字符串返回给客户端,每次访问可携带token

借助token实现单点登陆过程

①客户端在进行登陆访问后,服务端生成token字符串返回给客户端
②客户端在之后的每次访问请求中都会携带token(可放在head或cookie中)
③服务器解析token可判断登陆状态

使用jwt生成TokenUtils

/***使用jwt算法生成token字符串*/
public class JwtUtils {//常量public static final long EXPIRE = 1000 * 60 * 60 * 24; //token过期时间public static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO"; //秘钥//生成token字符串的方法public static String getJwtToken(String id, String nickname){String JwtToken = Jwts.builder()//头信息.setHeaderParam("typ", "JWT").setHeaderParam("alg", "HS256")//设置过期时间.setSubject("online-user").setIssuedAt(new Date()).setExpiration(new Date(System.currentTimeMillis() + EXPIRE))//设置token主体部分 ,存储用户信息.claim("id", id).claim("nickname", nickname)//签名Hash.signWith(SignatureAlgorithm.HS256, APP_SECRET).compact();return JwtToken;}/*** 判断token是否存在与有效*/public static boolean checkToken(String jwtToken) {if(StringUtils.isEmpty(jwtToken)) return false;try {Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 判断token是否存在与有效*/public static boolean checkToken(HttpServletRequest request) {try {String jwtToken = request.getHeader("token");if(StringUtils.isEmpty(jwtToken)) return false;Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 根据token字符串获取用户id*/public static String getMemberIdByJwtToken(HttpServletRequest request) {String jwtToken = request.getHeader("token");if(StringUtils.isEmpty(jwtToken)) return "";Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);Claims claims = claimsJws.getBody();return (String)claims.get("id");}
}

Token实现单点登陆相关推荐

  1. 登陆验证发展史(cookie认证->session认证->token认证->JWT,单系统登陆->多系统单点登陆)

    登陆验证发展史有两条主线.在服务部署方式层面,早期的Web服务系统简单一般都是单系统,登陆的话就登陆这一个系统就好了,随着系统复杂性越来越高,一个大的系统往往由很多子系统组成,用户使用这个大系统时不可 ...

  2. IM开发基础知识补课(一):正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...

  3. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...

  4. 企业内部应用(阿里商旅)集成 钉钉 与 微信 实现SSO单点登陆

    1.钉钉准备工作 (1) 创建应用 https://open-dev.dingtalk.com/fe/app#/corp/app (2)获取应用凭证 记录 AgentId AppKey AppSecr ...

  5. 08-微服务版单点登陆系统(SSO)实践

    文章目录 单点登陆系统简介 背景分析 单点登陆系统概述 单点登陆系统解决方案设计 单点登陆系统初步设计 服务设计 工程结构设计 SSO父工程创建及初始化 创建父工程 父工程pom文件初始配置 系统基础 ...

  6. 关于系统之间的单点登陆对接

    这里说的单点登陆,不是正规的那种有个中间服务做的,(如CAS).差不多是一种假的单点登陆. 但是在工作需求有时候会遇到, 尤其是做定制化产品. 一个客户买了我们公司一个产品, 同时买了另外一个公司的产 ...

  7. 浙里办开发票据认证单点登陆、令牌获取用户信息

    浙里办开发票据认证单点登陆.令牌获取用户信息(JAVA后端处理)   最近在搞浙里办开发,周边的人里都没人接触过,以至于自己摸索搞起来比较心累.浙里办单点登陆需要在IRS上走申请,审核流程通过后,和指 ...

  8. 社交登陆,分布式session,单点登陆,jwt

    社交登陆,分布式session,单点登陆,jwt 一.社交登录 QQ. 微博. github 等网站的用户量非常大, 别的网站为了简化自我网站的登陆与注册逻辑, 引入社交登陆功能: 步骤: 1) . ...

  9. 在tomcat集群下利用redis实现单点登陆

    场景:比如说我们要实现一个集群环境,无非是把多个项目部署到多个tomcat下,然后按照一定的算法,轮询什么的随机访问多个tomcat服务器,但是问题也会有许多,比如说,我们最开始是把登陆人的信息存放到 ...

最新文章

  1. String,StringBuffer与StringBuilder的区别??
  2. Spring的核心思想,总结得非常好!
  3. Spring注解之@Transactional对于事务异常的处理
  4. android中 onResume()方法什么时候执行 ??(转)
  5. 【资源】太赞了!程序员应该访问的最佳网站都在这里了!
  6. 暑期社会实践服务器维护,寒假网络维护社会实践报告
  7. ajax请求拿到多条数据拼接显示在页面中
  8. 概率论与数理统计思维导图知识框架_考研概率论与数理统计 综合题型秘籍思维导图① 随机变量1~3章 [21考研上岸之旅]...
  9. mysql搜索引擎_常见的 mysql 搜索引擎
  10. java treeset排序_java TreeSet的排序之自然排序
  11. 功能设计文档_PRD文档范例,产品经理值得收藏的写作手册
  12. wmp 所有的事件和属性(转)
  13. 【2015DTCC】专访永洪科技CEO:商业智能搬运大数据之谜
  14. Redis 缓存清理策略
  15. 不知道如何压缩PDF?教你3个压缩PDF文件方法
  16. 如何购买并配置华为云服务器?
  17. 2019春季PAT甲级题解
  18. 关于CTF中脚本的编写及使用。ISCC之Retrieve the passcode
  19. 四/八电极测脂技术做蓝牙八电极脂肪秤方案
  20. 【HDU3292】数学_佩尔方程

热门文章

  1. 分布式事务(理论+实战)
  2. JAVA websocket中 spring无法注入依赖问题解决
  3. 【JAVA 第三章 流程控制语句】课后习题 随机整数最大值和最小值
  4. C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)
  5. C#LeetCode刷题-排序
  6. mysql connection_id 表锁的应用
  7. rabbitmq异步_在Node.js中使用RabbitMQ和Tortoise进行异步消息传递
  8. python 图像格式转换_如何用六行Python构建图像类型转换器
  9. 如何构建具有实时搜索功能的React Native FlatList
  10. python 删除尾部0_python之List常见操作