Compare commits

..

No commits in common. "main" and "v0.0.98" have entirely different histories.

5 changed files with 47 additions and 50 deletions

View File

@ -77,19 +77,19 @@ func (t *tokenJwt) IsExpired(tokenstring string) (bool, error) {
// 分割JWT的三个部分 // 分割JWT的三个部分
parts := strings.Split(tokenstring, ".") parts := strings.Split(tokenstring, ".")
if len(parts) != 3 { if len(parts) != 3 {
return true, errcode.ErrTokenDataInvalid return false, errcode.ErrTokenDataInvalid
} }
// 解码Payload部分 // 解码Payload部分
payload, err := base64.RawURLEncoding.DecodeString(parts[1]) payload, err := base64.RawURLEncoding.DecodeString(parts[1])
if err != nil { if err != nil {
return true, errcode.String(errcode.ErrTokenBase64Decode, err.Error()) return false, errcode.String(errcode.ErrTokenBase64Decode, err.Error())
} }
// 解析JSON // 解析JSON
var claims jwt.RegisteredClaims var claims jwt.RegisteredClaims
if err := json.Unmarshal(payload, &claims); err != nil { if err := json.Unmarshal(payload, &claims); err != nil {
return true, errcode.String(errcode.ErrTokenJsonDecode, err.Error()) return false, errcode.String(errcode.ErrTokenJsonDecode, err.Error())
} }
// 检查过期时间 // 检查过期时间

View File

@ -3,8 +3,6 @@
package infra package infra
import ( import (
"time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
) )
@ -15,8 +13,7 @@ var Response Reply
type Reply struct { type Reply struct {
Code int32 `json:"code"` // 响应码 Code int32 `json:"code"` // 响应码
Message string `json:"message"` // 响应消息 Message string `json:"message"` // 响应消息
Details any `json:"details"` // 响应数据 Result any `json:"result"` // 响应数据
Timeseq int64 `json:"timeseq"` // 时间戳序列
} }
// Success 返回成功响应 // Success 返回成功响应
@ -24,11 +21,10 @@ type Reply struct {
// data: 响应数据 // data: 响应数据
func (reply *Reply) Success(ctx *gin.Context, data any) { func (reply *Reply) Success(ctx *gin.Context, data any) {
reply.Code = 0 reply.Code = 0
reply.Details = data reply.Result = data
reply.Message = "" reply.Message = ""
reply.Timeseq = time.Now().UnixMilli()
if data == nil { if data == nil {
reply.Details = "" reply.Result = ""
} }
ctx.JSON(200, reply) ctx.JSON(200, reply)
} }
@ -38,7 +34,7 @@ func (reply *Reply) Success(ctx *gin.Context, data any) {
// err: 错误对象 // err: 错误对象
func (reply *Reply) Error(ctx *gin.Context, err error) { func (reply *Reply) Error(ctx *gin.Context, err error) {
reply.Code = 500 reply.Code = 500
reply.Details = "" reply.Result = ""
// 默认状态码为500 // 默认状态码为500
e, ok := status.FromError(err) e, ok := status.FromError(err)
if ok { if ok {

View File

@ -41,23 +41,6 @@ var (
once sync.Once once sync.Once
) )
// 初始化Logger配置
func New(cfg *conf.LogConf) {
if cfg == nil {
cfg = &conf.LogConf{
Name: strings.ToLower(vars.ServiceKey),
Level: vars.LogLevel(vars.DEBUG),
Dir: "./logs/",
Endpoint: "",
Console: true,
File: true,
Remote: false,
}
}
InitLogger(cfg)
}
// InitLogger 初始化全局日志器 // InitLogger 初始化全局日志器
func InitLogger(cfg *conf.LogConf) error { func InitLogger(cfg *conf.LogConf) error {
var err error var err error

View File

@ -6,9 +6,9 @@ import (
"encoding/json" "encoding/json"
"log" "log"
"net/http" "net/http"
"time"
"git.apinb.com/bsm-sdk/core/crypto/token" "git.apinb.com/bsm-sdk/core/crypto/encipher"
"git.apinb.com/bsm-sdk/core/env"
"git.apinb.com/bsm-sdk/core/errcode" "git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/types" "git.apinb.com/bsm-sdk/core/types"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -27,27 +27,8 @@ func JwtAuth(time_verify bool) gin.HandlerFunc {
c.Abort() c.Abort()
return return
} }
// 检测是否需要验证token时间
if time_verify {
// 判断时间claims.ExpiresAt
isExpire, err := token.New(env.Runtime.JwtSecretKey).IsExpired(authHeader)
if err != nil {
log.Println("token解析异常:", err)
c.JSON(http.StatusUnauthorized, gin.H{"error": "Token is required"})
c.Abort()
return
}
if isExpire {
log.Println("token过期请重新获取:", "Token has expired")
c.JSON(http.StatusUnauthorized, gin.H{"error": "Token has expired"})
c.Abort()
return
}
}
// 提取Token // 提取Token
claims, err := token.New(env.Runtime.JwtSecretKey).ParseJwt(authHeader) claims, err := encipher.ParseTokenAes(authHeader)
if err != nil || claims == nil { if err != nil || claims == nil {
log.Printf("提取token异常:%v\n", err) log.Printf("提取token异常:%v\n", err)
c.JSON(http.StatusUnauthorized, gin.H{"error": "Token is required"}) c.JSON(http.StatusUnauthorized, gin.H{"error": "Token is required"})
@ -55,6 +36,17 @@ func JwtAuth(time_verify bool) gin.HandlerFunc {
return return
} }
// 检测是否需要验证token时间
if time_verify {
// 判断时间claims.ExpiresAt
if time.Now().Unix() > claims.ExpiresAt {
log.Println("token过期请重新获取:", "Token has expired")
c.JSON(http.StatusUnauthorized, gin.H{"error": "Token has expired"})
c.Abort()
return
}
}
// 将解析后的 Token 存储到上下文中 // 将解析后的 Token 存储到上下文中
c.Set("Auth", claims) c.Set("Auth", claims)
// 如果 Token 有效,继续处理请求 // 如果 Token 有效,继续处理请求

26
with/logger.go Normal file
View File

@ -0,0 +1,26 @@
package with
import (
"strings"
"git.apinb.com/bsm-sdk/core/conf"
"git.apinb.com/bsm-sdk/core/logger"
"git.apinb.com/bsm-sdk/core/vars"
)
// 初始化Logger配置
func Logger(cfg *conf.LogConf) {
if cfg == nil {
cfg = &conf.LogConf{
Name: strings.ToLower(vars.ServiceKey),
Level: vars.LogLevel(vars.DEBUG),
Dir: "./logs/",
Endpoint: "",
Console: true,
File: true,
Remote: false,
}
}
logger.InitLogger(cfg)
}