代码拉取完成,页面将自动刷新
package middleware
import (
"fmt"
"gitee.com/web-bird/bird/assets/utils"
"sync"
"github.com/gin-gonic/gin"
)
//签名验证中间件
//签名长度在74-104字符之间
//signKey=sign的header key名
//secret=密匙
var signsMap = new(sync.Map)
var signLength = 0
func Sign(signKey, secret string) gin.HandlerFunc { //
return func(c *gin.Context) {
signLength++
if signLength > 100000 {
signsMap = new(sync.Map)
signLength = 0
}
signStr := c.GetHeader(signKey)
if l := len(signStr); l < 74 || l > 104 {
c.AbortWithStatus(403)
return
}
signIndex := utils.Sha256(c.ClientIP(), c.Request.RequestURI, signStr)
if _, ok := signsMap.Load(signIndex); ok {
c.AbortWithStatus(403)
return
}
start := len(signStr) - 64
token := signStr[:start]
sign := signStr[start:]
if utils.Sha256(fmt.Sprint(token, secret)) != sign { //签名未通过
c.AbortWithStatus(403)
return
}
signsMap.Store(signIndex, true)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。