Token实现单点登陆
单点登陆(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实现单点登陆相关推荐
- 登陆验证发展史(cookie认证->session认证->token认证->JWT,单系统登陆->多系统单点登陆)
登陆验证发展史有两条主线.在服务部署方式层面,早期的Web服务系统简单一般都是单系统,登陆的话就登陆这一个系统就好了,随着系统复杂性越来越高,一个大的系统往往由很多子系统组成,用户使用这个大系统时不可 ...
- IM开发基础知识补课(一):正确理解前置HTTP SSO单点登陆接口的原理
1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...
- IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理
1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...
- 企业内部应用(阿里商旅)集成 钉钉 与 微信 实现SSO单点登陆
1.钉钉准备工作 (1) 创建应用 https://open-dev.dingtalk.com/fe/app#/corp/app (2)获取应用凭证 记录 AgentId AppKey AppSecr ...
- 08-微服务版单点登陆系统(SSO)实践
文章目录 单点登陆系统简介 背景分析 单点登陆系统概述 单点登陆系统解决方案设计 单点登陆系统初步设计 服务设计 工程结构设计 SSO父工程创建及初始化 创建父工程 父工程pom文件初始配置 系统基础 ...
- 关于系统之间的单点登陆对接
这里说的单点登陆,不是正规的那种有个中间服务做的,(如CAS).差不多是一种假的单点登陆. 但是在工作需求有时候会遇到, 尤其是做定制化产品. 一个客户买了我们公司一个产品, 同时买了另外一个公司的产 ...
- 浙里办开发票据认证单点登陆、令牌获取用户信息
浙里办开发票据认证单点登陆.令牌获取用户信息(JAVA后端处理) 最近在搞浙里办开发,周边的人里都没人接触过,以至于自己摸索搞起来比较心累.浙里办单点登陆需要在IRS上走申请,审核流程通过后,和指 ...
- 社交登陆,分布式session,单点登陆,jwt
社交登陆,分布式session,单点登陆,jwt 一.社交登录 QQ. 微博. github 等网站的用户量非常大, 别的网站为了简化自我网站的登陆与注册逻辑, 引入社交登陆功能: 步骤: 1) . ...
- 在tomcat集群下利用redis实现单点登陆
场景:比如说我们要实现一个集群环境,无非是把多个项目部署到多个tomcat下,然后按照一定的算法,轮询什么的随机访问多个tomcat服务器,但是问题也会有许多,比如说,我们最开始是把登陆人的信息存放到 ...
最新文章
- String,StringBuffer与StringBuilder的区别??
- Spring的核心思想,总结得非常好!
- Spring注解之@Transactional对于事务异常的处理
- android中 onResume()方法什么时候执行 ??(转)
- 【资源】太赞了!程序员应该访问的最佳网站都在这里了!
- 暑期社会实践服务器维护,寒假网络维护社会实践报告
- ajax请求拿到多条数据拼接显示在页面中
- 概率论与数理统计思维导图知识框架_考研概率论与数理统计 综合题型秘籍思维导图① 随机变量1~3章 [21考研上岸之旅]...
- mysql搜索引擎_常见的 mysql 搜索引擎
- java treeset排序_java TreeSet的排序之自然排序
- 功能设计文档_PRD文档范例,产品经理值得收藏的写作手册
- wmp 所有的事件和属性(转)
- 【2015DTCC】专访永洪科技CEO:商业智能搬运大数据之谜
- Redis 缓存清理策略
- 不知道如何压缩PDF?教你3个压缩PDF文件方法
- 如何购买并配置华为云服务器?
- 2019春季PAT甲级题解
- 关于CTF中脚本的编写及使用。ISCC之Retrieve the passcode
- 四/八电极测脂技术做蓝牙八电极脂肪秤方案
- 【HDU3292】数学_佩尔方程
热门文章
- 分布式事务(理论+实战)
- JAVA websocket中 spring无法注入依赖问题解决
- 【JAVA 第三章 流程控制语句】课后习题 随机整数最大值和最小值
- C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)
- C#LeetCode刷题-排序
- mysql connection_id 表锁的应用
- rabbitmq异步_在Node.js中使用RabbitMQ和Tortoise进行异步消息传递
- python 图像格式转换_如何用六行Python构建图像类型转换器
- 如何构建具有实时搜索功能的React Native FlatList
- python 删除尾部0_python之List常见操作