29.Jwt集成(3):token设置过期时间、异常判断
token设置过期时间
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go"
"io/ioutil"
"log"
"time"
)
type UserClaim struct {
Uname string `json:"username"`
jwt.StandardClaims //嵌套了这个结构体就实现了Claim接口
}
func main() {
priBytes, err := ioutil.ReadFile("./pem/private.pem")
if err != nil {
log.Fatal("私钥文件读取失败")
}
pubBytes, err := ioutil.ReadFile("./pem/public.pem")
if err != nil {
log.Fatal("公钥文件读取失败")
}
pubKey, err := jwt.ParseRSAPublicKeyFromPEM(pubBytes)
if err != nil {
log.Fatal("公钥文件不正确")
}
priKey, err := jwt.ParseRSAPrivateKeyFromPEM(priBytes)
if err != nil {
log.Fatal("私钥文件不正确")
}
user := UserClaim{Uname: "xiahualou"}
user.ExpiresAt = time.Now().Add(time.Second * 5).Unix() //UserClaim嵌套了jwt.StandardClaims,使用它的Add方法添加过期时间是5秒后,这里要使用unix()
token_obj := jwt.NewWithClaims(jwt.SigningMethodRS256, user) //所有人给xiahualou发送公钥加密的数据,但是只有xiahualou本人可以使用私钥解密
token, _ := token_obj.SignedString(priKey)
//通过一秒一次for循环来验证过期生效
for {
uc := UserClaim{}
getToken, err := jwt.ParseWithClaims(token, &uc, func(token *jwt.Token) (i interface{}, e error) { //使用私钥解密
return pubKey, nil //这里的返回值必须是公钥,不然解密肯定是失败
})
if getToken.Valid { //服务端验证token是否有效
fmt.Println(getToken.Claims.(*UserClaim).Uname)
} else if ve, ok := err.(*jwt.ValidationError); ok { //官方写法招抄就行
if ve.Errors&jwt.ValidationErrorMalformed != 0 {
fmt.Println("错误的token")
} else if ve.Errors&(jwt.ValidationErrorExpired|jwt.ValidationErrorNotValidYet) != 0 {
fmt.Println("token过期或未启用")
} else {
fmt.Println("无法处理这个token", err)
}
}
time.Sleep(time.Second)
}
}
29.Jwt集成(3):token设置过期时间、异常判断的更多相关文章
- java操作Redis缓存设置过期时间
关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...
- 可以设置过期时间的Java缓存Map
前言 最近项目需求需要一个类似于redis可以设置过期时间的K,V存储方式.项目前期暂时不引进redis,暂时用java内存代替. 解决方案 1. ExpiringMap 功能简介 : 1.可设置Ma ...
- redis中的key设置过期时间
EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 在 Redis 中,带有生存时间的 key 被称为『易失的 ...
- redis 一二事 - 设置过期时间,以文件夹形式展示key显示缓存数据
在使用redis时,有时回存在大量数据的时候,而且分类相同,ID相同 可以使用hset来设置,这样有一个大类和一个小分类和一个value组成 但是hset不能设置过期时间 过期时间只能在set上设置 ...
- redis批量设置过期时间
Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作.代码如下: redis-cli keys &qu ...
- redis文档翻译_key设置过期时间
Available since 1.0.0. 使用開始版本号1.01 Time complexity: O(1) 时间复杂度O(1) 出处:http://blog.csdn.net/colum ...
- Redis原子性写入HASH结构数据并设置过期时间
Redis中提供了原子性命令SETEX或SET来写入STRING类型数据并设置Key的过期时间: > SET key value EX NX ok > SETEX key value ok ...
- 针对永久不过期的key 批量设置过期时间
问题需求: redis内存暴增,后来发现有很多设置永久不过期. 解决:查找出来之后针对前缀批量设置过期时间 (过期时间与开发沟通 保证服务不受影响) 来源于网上杨一的代码 正好解决了我遇到的问题 在这 ...
- python中使用redis模块, 设置过期时间
# 链接数据库self.handle = redis.Redis(host=host, port=port, db=db, password=password, decode_responses=Tr ...
随机推荐
- pm2 代替 Supervisor 管理进程
前提 我们在使用 Laravel 的时候不免用到列队来处理任务,而 Laravel 官方文档给出的是 Supervisor 来管理进程和监控.但是我们在使用中有下面几个缺点: Supervisor 单 ...
- cef加载flash的办法
cef有2种加载flash插件的方式, 1,npapi,这种方式是调用系统自带的flash插件,由于有安全性方面的问题,已经被新版cef禁用. 2,ppapi,也就是 pepper flash,这是谷 ...
- React Native中ref的用法(通过组件的ref属性,来获取真实的组件)
ref是什么? ref是组件的特殊属性,组件被渲染后,指向组件的一个引用.可以通过组件的ref属性,来获取真实的组件.因为,组件并不是真正的DOM节点,而是存在于内存中的一种数据结构,称为虚拟的DOM ...
- python3.4 + pycharm安装与使用
因个人是windows的环境,所以本文只讲windows环境下的python安装. 作为初用python的盆友,强烈建议只在电脑上装一个python版本就好了,不然就进了各种坑里了. Python安装 ...
- core python
一:正则表达式 闭包操作符 | 等同于 or exp:a|b|c . 匹配任意一个字符 (若匹配本字符,需转义使用 \. 不能匹配换行符\n及空字符串) (^:匹配首 ...
- Django 数据库操作
Django 数据库操作 Django运算表达式与Q对象/F对象 1 模型查询 概述: 1 查询集:表示从数据库中获取的对象的集合 2 查询集可以有多个过滤器,通过 逻辑运算符连接 3 过滤器就是一个 ...
- 浅谈Angularjs至Angular2后内置指令的变化
一.科普概要说明 我们常说的 Angular 1 是指 AngularJS: 从Angular 2 开始已经改名了.不再带有JS,只是单纯的 Angular: Angular 1.x 是基于JavaS ...
- [转帖]$PWD 和 $(pwd)
$PWD 和 $(pwd) https://blog.csdn.net/shaojwa/article/details/51894980 细节决定成败. 注意两个效果一样,但是注意大小写,PWD是 ...
- git clone 报错 fatal: protocol 'https' is not supported 解决办法
版本:git 2.22.0 系统:win7旗舰版 先把https去掉 再把https加上 神奇的事情出现了,这样就可以了. 很多人都说这样解决了,原因不知道. Administrator@BWE8QX ...
- js中的alert弹出框文字乱码解决方案
使用如下代码即可: echo '<html>'; echo '<head><meta http-equiv="Content-Type" conten ...