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设置过期时间、异常判断的更多相关文章

  1. java操作Redis缓存设置过期时间

    关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...

  2. 可以设置过期时间的Java缓存Map

    前言 最近项目需求需要一个类似于redis可以设置过期时间的K,V存储方式.项目前期暂时不引进redis,暂时用java内存代替. 解决方案 1. ExpiringMap 功能简介 : 1.可设置Ma ...

  3. redis中的key设置过期时间

    EXPIRE key seconds 为给定  key  设置生存时间,当  key  过期时(生存时间为  0  ),它会被自动删除. 在 Redis 中,带有生存时间的  key  被称为『易失的 ...

  4. redis 一二事 - 设置过期时间,以文件夹形式展示key显示缓存数据

    在使用redis时,有时回存在大量数据的时候,而且分类相同,ID相同 可以使用hset来设置,这样有一个大类和一个小分类和一个value组成 但是hset不能设置过期时间 过期时间只能在set上设置 ...

  5. redis批量设置过期时间

    Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作.代码如下: redis-cli keys &qu ...

  6. redis文档翻译_key设置过期时间

    Available since 1.0.0.    使用開始版本号1.01 Time complexity: O(1)  时间复杂度O(1) 出处:http://blog.csdn.net/colum ...

  7. Redis原子性写入HASH结构数据并设置过期时间

    Redis中提供了原子性命令SETEX或SET来写入STRING类型数据并设置Key的过期时间: > SET key value EX NX ok > SETEX key value ok ...

  8. 针对永久不过期的key 批量设置过期时间

    问题需求: redis内存暴增,后来发现有很多设置永久不过期. 解决:查找出来之后针对前缀批量设置过期时间 (过期时间与开发沟通 保证服务不受影响) 来源于网上杨一的代码 正好解决了我遇到的问题 在这 ...

  9. python中使用redis模块, 设置过期时间

    # 链接数据库self.handle = redis.Redis(host=host, port=port, db=db, password=password, decode_responses=Tr ...

随机推荐

  1. Computed Styles

    The style object offers no information about the styles that have cascaded from style sheets and aff ...

  2. 基于.net 4.0框架的Cipher演示程序

    using System.Text; namespace Cipher.Algorithm { static class Caesar { static public string Encrypt(s ...

  3. hibernate之inverse=true相关配置讲解

      首先inverse=”true”是在双向关联里面使用单向关联没有这个配置 inverse – 标记由哪一方来维护关联关系(双向关联中会用到) inverse默认值为false 如果inverse设 ...

  4. Data - 【转】数据统计、数据挖掘、大数据、OLAP的区别

    原文链接 数据分析 数据分析是一个大的概念,理论上任何对数据进行计算.处理从而得出一些有意义的结论的过程,都叫数据分析. 从数据本身的复杂程度.以及对数据进行处理的复杂度和深度来看,可以把数据分析分为 ...

  5. Laravel验证问题记录

    1.当购物车提交时,POST传来一个对象{address:2,item:{ {ksu_id:2,count:2},{ksu_id:2,count:2}, } 验证方法: public function ...

  6. Python学习教程:Pandas中第二好用的函数

    从网上看到一篇好的文章是关于如何学习python数据分析的迫不及待想要分享给大家,大家也可以点链接看原博客.希望对大家的学习有帮助. 本次的Python学习教程是关于Python数据分析实战基础相关内 ...

  7. NumPy进阶

    数组算术 任何两个等尺寸数组之间的算术操作都应用了逐元素操作的方式. arr1 = np.array([[1,2,3],[4,5,6]]) arr2 = np.array([[4,2,1],[7,2, ...

  8. Linux系统下部署Tomcat服务器

    详细步骤如下: 1.下载xshell5和xftp5并安装,登录连接服务器,新建会话窗口: 2.安装配置JDK1.8,具体操作方法如下: (1)下载JDK地址:http://www.oracle.com ...

  9. celery 调用scrapy

    我的环境: celery 3.1.25 python 3.6.9 window10 celery tasks 代码如下,其中 QuotesSpider 是我的scrapy项目爬虫类名称 from ce ...

  10. codeforces 620C

    题目链接:https://codeforces.com/problemset/problem/620/C 题目分析 题意:给你一串珍珠,每个珍珠都有一个对应值,需要分割这n个珍珠(必须连续),使得每一 ...