令牌颁发与管理服务

技术背景

在分布式系统中,令牌(Token)被广泛应用于身份认证成功后对系统的访问控制。在本文中,我们实现了一个简单的令牌颁发与管理服务,其中包含访问令牌(AccessToken)和刷新令牌(RefreshToken)两种类型的令牌。

功能需求

  1. 颁发刷新令牌和访问令牌
  2. 验证和管理访问令牌
  3. 支持刷新令牌的续期

技术实现

配置

  • 该代码实现时是用了redis,此时环境中使用的是debina12.5和redis server v=7.0.15
  • maven工程pom导入
<dependencies><!-- redis客户端 --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.1</version></dependency><!-- json tool --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.26</version></dependency></dependencies>

代码实现

package com.qcmb.token.service;/*** 令牌模型*/
public class Token {//令牌唯一标识protected String id;public String getId() {return id;}//令牌颁发时间 (毫秒)protected long issueTime;public long getIssueTime() {return issueTime;}//令牌的过期时间 (秒)protected int expirationSecond;public int getExpirationSecond() {return expirationSecond;}//与用户关联的idprotected String userId;public String getUserId() {return userId;}
}
package com.qcmb.token.service;/*** 短生命周期的令牌用于* 可用于验证用户访问资源*/
public class AccessToken extends Token{public void setId(String id) {this.id = id;}public void setUserId(String userId){this.userId = userId;}public void setIssueTime(long issueTime){this.issueTime = issueTime;}public void setExpirationSecond(int expirationSecond){this.expirationSecond = expirationSecond;}public AccessToken(){super();}//默认生命为30分钟public AccessToken(String userId,String accessTokenId){//在使用fsatjson反序列话的时候会调用构造方法,为了防止它调用此构造方法。我们必须写出一个无参的构造方法,它会调用这个无参的构造。//令牌颁发时间this.issueTime = System.currentTimeMillis();//令牌过期时间,默认30分钟this.expirationSecond = 30*60;//this.expirationSecond = 10;this.userId = userId;this.id = accessTokenId;}
}
package com.qcmb.token.service;/*** 长生命周期令牌* 只能用来生成短声明 AccessToken*/
public class RefreshToken extends Token{private String accessTokenId;public void setId(String id) {this.id = id;}public void setUserId(String userId){this.userId = userId;}public void setIssueTime(long issueTime){this.issueTime = issueTime;}public void setExpirationSecond(int expirationSecond){this.expirationSecond = expirationSecond;}public void setAccessTokenId(String accessTokenId) {this.accessTokenId = accessTokenId;}public String getAccessTokenId() {return accessTokenId;}public RefreshToken(){super();}//过期时间默认7天public RefreshToken(String userId,String tokenId){//在使用fsatjson反序列话的时候会调用构造方法,为了防止它调用此构造方法。我们必须写出一个无参的构造方法,它会调用这个无参的构造。//令牌颁发时间this.issueTime = System.currentTimeMillis();//令牌过期时间,默认7天this.expirationSecond = 7 * 24 * 60 * 60;//this.expirationSecond = 50;this.userId = userId;this.id = tokenId;}
}
package com.qcmb.token.service;/*** redis配置*/
public class MyRedisConfigBean {public String getRedis_host() {return redis_host;}public void setRedis_host(String redis_host) {this.redis_host = redis_host;}public Integer getRedis_port() {return redis_port;}public void setRedis_port(Integer redis_port) {this.redis_port = redis_port;}public String getRedis_password() {return redis_password;}public void setRedis_password(String redis_password) {this.redis_password = redis_password;}public Integer getRedis_timeout() {return redis_timeout;}public void setRedis_timeout(Integer redis_timeout) {this.redis_timeout = redis_timeout;}public Integer getRedis_pool_maxTotal() {return redis_pool_maxTotal;}public void setRedis_pool_maxTotal(Integer redis_pool_maxTotal) {this.redis_pool_maxTotal = redis_pool_maxTotal;}public Integer getRedis_pool_maxIdle() {return redis_pool_maxIdle;}public void setRedis_pool_maxIdle(Integer redis_pool_maxIdle) {this.redis_pool_maxIdle = redis_pool_maxIdle;}public Integer getRedis_pool_minIdle() {return redis_pool_minIdle;}public void setRedis_pool_minIdle(Integer redis_pool_minIdle) {this.redis_pool_minIdle = redis_pool_minIdle;}public Integer getRedis_pool_maxWaitMillis() {return redis_pool_maxWaitMillis;}public void setR

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统之iptables应用SNAT与DNAT

一、SNAT&#xff1a; 1.应用环境 局域网主机共享单个公网IP地址接入Internet &#xff08;私有IP不能在Internet中正常路由&#xff09; 2.SNAT原理 源地址转换&#xff0c;根据指定条件修改数据包的源IP地址&#xff0c;通常被叫做源映谢数据包从内网发送到公网时&#x…

CDH 6.x版本 HBase基础调优参数

参数默认值调优值参数解释hbase.regionserver.handler.count30120指定了每个RegionServer处理请求的最大线程数hbase.regionserver.metahandler.count30120指定了在RegionServer中处理Meta表的请求数量hbase.client.retries.number1015HBase客户端重试操作的最大次数hbase.hsto…

Java中的Enum

Enum是一个特殊的类 Java 中的枚举类型&#xff08;enum&#xff09;实际上是一种特殊的类。enum编译后是一个特殊的类&#xff08;有些类似单例模式&#xff09;这些实例在声明时就被创建&#xff0c;并在整个应用程序的生命周期中只存在一个实例。 enum 用于定义包含固定数量…

Fiddler与wireshark使用

Fiddler解决三个问题 1、SSL证书打勾&#xff0c;解析https请求 2、响应回来乱码&#xff0c;不是中文 3、想及时中止一下&#xff0c;查看实时的日志 4、搜索对应的关键字 问题1解决方案&#xff1a; 标签栏Tools下 找到https&#xff0c;全部打勾 Actions里面 第一个 t…

项目的一些难点

1.不用redis?分布式锁&#xff0c;如何防止用户重复点击&#xff1f; 1.乐观锁 乐观锁是一种在数据库层面上避免并发冲突的机制。它通常通过在数据库记录中添加一个版本号&#xff08;或时间戳&#xff09;来实现。每次更新记录时&#xff0c;都会检查版本号是否与数据库中的…

Luogu P6175 无向图的最小环问题 题解 Floyd

题目链接&#xff1a;Luogu P6175 无向图的最小环问题 题目描述&#xff1a; 给定一张带权无向图&#xff0c;求出经过至少三个不同的点的最小环&#xff0c;环的大小由经过的边权和决定。 题解&#xff1a; 我们首先回到Floyd算法&#xff0c;在Floyd算法中&#xff0c;我们定…

从输入url到页面显示中间发生了什么

文章目录 整体概述URL释义用户输入缓存处理域名解析IP 地址什么是域名解析浏览器查找域名对应IP小结 TCP 三次握手握手时序三次握手数据包分析为什么需要三次握手 HTTP 请求HTTP 响应服务器MVC 后台处理阶段http 响应报文 TCP 四次挥手浏览器渲染 整体概述 浏览器输入 URL 到页…

如何搭建Facebook直播网络?

在当今数字化时代&#xff0c;Facebook直播已经成为了一种极具吸引力的社交形式&#xff0c;为个人和企业提供了与观众直接互动的机会&#xff0c;成为推广产品、分享经验、建立品牌形象的重要途径。然而&#xff0c;对于许多人来说&#xff0c;搭建一个稳定、高质量的 Faceboo…

创意办公:专注 ONLYOFFICE,探索办公新境界

一.ONLYOFFICE 介绍 ONLYOFFICE 是一个基于 Web 的办公套件&#xff0c;提供了文档处理、电子表格和演示文稿编辑等功能。它被设计为一个协作工具&#xff0c;支持多人实时协作编辑文档&#xff0c;并且可以在本地部署或者作为云服务使用。 二.ONLYOFFICE 特点和功能 以下是 …

Unity调用文心-ERNIE-Bot-turbo

参考文章 ERNIE-Bot-turbo - 千帆大模型平台 | 百度智能云文档 (baidu.com) 错误码 - 千帆大模型平台 | 百度智能云文档 (baidu.com) private readonly string apiKey "";private readonly string secretKey "";private readonly string tokenUrl &q…

品牌渠道管控的目标是什么

品牌做渠道管控的根本原因是解决渠道中的各种问题&#xff0c;常见的渠道问题包含破价、窜货、假货等&#xff0c;在治理渠道的过程中&#xff0c;其实也是对渠道中各角色关系的梳理&#xff0c;比如通过治理破价链接&#xff0c;可以及时发现渠道中不符合品牌价值的经销商&…

十大基础排序算法

排序算法分类 排序&#xff1a;将一组对象按照某种逻辑顺序重新排列的过程。 按照待排序数据的规模分为&#xff1a; 内部排序&#xff1a;数据量不大&#xff0c;全部存在内存中&#xff1b;外部排序&#xff1a;数据量很大&#xff0c;无法一次性全部存在内存中&#xff0c;…

Vue2尚品汇前台项目笔记——(1)项目初始化

Vue2尚品汇前台项目笔记 一、项目初始化 使用[脚手架创建项目&#xff0c;具体参考之前的脚手架配置笔记&#xff0c;我起名叫vue_shop_test 1.脚手架目录分析 node_modules文件夹&#xff1a;项目依赖文件夹 public文件夹&#xff1a;一般放置一些静态资源&#xff08;图…

Java项目:20 基于SSM实现的支教管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 ssm支教管理系统&#xff08;前台后台&#xff09; 前台角色&#xff1a;支教学校志愿者 支教学校功能模块&#xff1a;支教学校查询报名职位…

3DTile是不是没有坐标的选择?

可参考以下内容&#xff1a; 一、坐标参考系统(CRS) 3D Tiles 使用右手笛卡尔坐标系;也就是说&#xff0c;x和y的叉积产生z。3D Tiles 将z轴定义为局部笛卡尔坐标系的向上。tileset的全局坐标系通常位于WGS 84地心固定(ECEF)参考系(EPSG4978)中&#xff0c;但它不是必须的&am…

【数据结构】单向循环链表

一、mian函数 #include <stdio.h> #include "./3.looplinklist.h" int main(int argc, const char *argv[]) {looplinklist* head create_looplinklist();insertHead_looplinklist(head,100);insertHead_looplinklist(head,200);insertHead_looplinklist(hea…

瑞盟MS5188N——16bit、8 通道、500kSPS、 SAR 型 ADC

产品简述 MS5188N 是 8 通道、 16bit 、电荷再分配逐次逼近型模数 转换器&#xff0c;采用单电源供电。 MS5188N 拥有多通道、低功耗数据采集系统所需的所有 组成部分&#xff0c;包括&#xff1a;无失码的真 16 位 SAR ADC &#xff1b;用于将输入配 置为单端输入…

【Flink状态管理(八)】Checkpoint:CheckpointBarrier对齐后Checkpoint的完成、通知与对学习状态管理源码的思考

文章目录 一. 调用StreamTask执行Checkpoint操作1. 执行Checkpoint总体代码流程1.1. StreamTask.checkpointState()1.2. executeCheckpointing1.3. 将算子中的状态快照操作封装在OperatorSnapshotFutures中1.4. 算子状态进行快照1.5. 状态数据快照持久化 二. CheckpointCoordin…

pyson语言身份证实名认证接口标准版调用-身份证实名认证API

身份证实名认证功能主要是确保用户身份的真实性&#xff0c;降低欺诈风险&#xff0c;提高平台安全性。翔云身份证实名认证API&#xff0c;高效、准确且合规&#xff0c;是广大开发人员的优质选择。 翔云身份实名认证API对接简单易集成&#xff0c;支持各种主流编程语言&#…

图的遍历-----深度优先遍历(dfs),广度优先遍历(bfs)【java详解】

目录 简单介绍&#xff1a;什么是深度、广度优先遍历&#xff1f; 深度优先搜索&#xff08;DFS&#xff0c;Depth First Search&#xff09;&#xff1a; 大致图解&#xff1a; 广度优先搜索&#xff08;BFS&#xff0c;Breadth First Search&#xff09;&#xff1a; 大致图…