【REST2SQL】12 REST2SQL增加Token生成和验证

【REST2SQL】01RDB关系型数据库REST初设计
【REST2SQL】02 GO连接Oracle数据库
【REST2SQL】03 GO读取JSON文件
【REST2SQL】04 REST2SQL第一版Oracle版实现
【REST2SQL】05 GO 操作 达梦 数据库
【REST2SQL】06 GO 跨包接口重构代码
【REST2SQL】07 GO 操作 Mysql 数据库
【REST2SQL】08 日志重构增加输出到文件log.txt
【REST2SQL】09 给Go的可执行文件exe加图标和版本信息等
【REST2SQL】10 REST2SQL操作指南
【REST2SQL】11 基于jwt-go生成token与验证


【REST2SQL】11 基于jwt-go生成token与验证的Token生成和验证合并到【REST2SQL】

1 Rest2sql目录下新建token子目录

2 token.go的代码重构

  • 包名改为token
  • 屏蔽或删除 main()入口函数
  • 重构全局变量,都改为外部不可见,即变量名改为首字母改为小写即可
  • 只暴露生成token函数GenerateTokenHandler()和验证token函数ValidateTokenHandler()
  • 暴露函数第二个参数重构

重构完成的代码如下:

package token

import (
	"crypto/rand"
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"time"

	jwt "github.com/dgrijalva/jwt-go"
)

// 初始化函数
func init() {
   
   
	// 实例化计数计时器
	counter = NewCounter()

	// 初始化随机 Key
	key, err := generateRandomString(16)
	if err != nil {
   
   
		log.Fatal(err)
	}

	// 打印时间戳
	fmt.Println("Start At timeStamp :", timeStamp, time.Unix(timeStamp, 0), key)
}

// Counter 定义一个简单的计数器
type Counter struct {
   
   
	value      int
	timeStampc int64 // 时间戳,用于定期更新密钥key
}

// 计时器变量实例
var counter *Counter

// NewCounter 创建一个新的计数器
func NewCounter() *Counter {
   
   
	return &Counter{
   
   value: 0, timeStampc: time.Now().Unix()}
}

// Increment 增加计数器的值
func (c *Counter) Increment() {
   
   
	c.value++
	c.timeStampc = time.Now().Unix()
}

// // Decrement 减少计数器的值
// func (c *Counter) Decrement() {
   
   
// 	c.value--
// }

// // Reset 重置计数器的值为0
// func (c *Counter) Reset() {
   
   
// 	c.value = 0
// }

// GetValue 返回计数器的当前值
func (c *Counter) GetCounter() *Counter {
   
   
	return c
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值