jwt.go 2.81 KB
Newer Older
wangp's avatar
wangp committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
package jwt

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"system_pay/controller/base"
	"system_pay/utils"
)

//var DataAnalysisCh chan models.DataAnalysisModel

func init() {
	//DataAnalysisCh = make(chan models.DataAnalysisModel, 1000)
	//go DataAnalysisChannel()
}

// JWTAuthMiddleWare 基于JWT的认证中间件
func JWTAuthMiddleWare() func(c *gin.Context) {
	return func(c *gin.Context) {
		//客户端携带Token放在请求头
		authHeader := c.Request.Header.Get("Authorization")
		if authHeader == "" {
			base.ResponseErrorWithMsg(c, base.AuthorizationEmpty)
			c.Abort()
			return
		}

		mc, err := utils.ParseToken(authHeader)
		if err != nil {
			base.ResponseErrorWithMsg(c, base.AuthorizationEmpty)
			c.Abort()
			return
		}

		// des解密
		phoneMob := utils.ToDesDecrypt(mc.PhoneMob)
		userId := utils.ToDesDecrypt(mc.UserId)
		userName := utils.ToDesDecrypt(mc.UserName)
		//hospitalCode := utils.ToDesDecrypt(mc.HospitalCode)
		//chainCode := utils.ToDesDecrypt(mc.ChainCode)
		//hospitalID := utils.ToDesDecrypt(mc.HospitalID)
		//hospitalName := utils.ToDesDecrypt(mc.HospitalName)
		//ChainID := utils.ToDesDecrypt(mc.ChainID)
		// 将当前请求的username信息保存到请求的上下文c上
		c.Set("phone_mob", phoneMob)
		fmt.Println(phoneMob)
		c.Set("user_id", userId)
		fmt.Println(userId)
		c.Set("user_name", userName)
		fmt.Println(userName)
		//c.Set("hospital_code", hospitalCode)
		//c.Set("chain_code", chainCode)
		//c.Set("hospital_id", hospitalID)
		//c.Set("hospital_name", hospitalName)
		//c.Set("chain_id", ChainID)
		// 后续的处理函数可以用过c.Get("username")来获取当前请求的用户信息

		// 埋点生产者
		//BuriedProducer(c, hospitalCode, hospitalName, hospitalID)
		c.Next()
	}
}

// 埋点消费者
//func DataAnalysisChannel() {
//
//	for {
//		select {
//		case c := <-DataAnalysisCh:
//			buried_point.BuriedPointDistribution(c)
//		default:
//			//fmt.Println("当前没有处理的数据")
//			time.Sleep(500 * time.Millisecond )
//		}
//	}
//}
//
//func BuriedProducer(c *gin.Context, hospitalCode, hospitalName, hospitalID string) {
//
//	// 记录埋点
//	var d models.DataAnalysisModel
//	d.HospitalCode = hospitalCode
//	d.HospitalName = hospitalName
//	d.HospitalID = hospitalID
//	d.RequestBody = c.Request.Body
//	d.RequestTime = time.Now().Format("2006-01-02 15:04:05")
//	d.RequestUrl = c.Request.RequestURI
//	d.RequestPath = c.Request.URL.Path
//	d.RequestShowType = base.QueryInt(c, "showType")
//
//	//为防止对接口入侵达到最小 达到接口隔离效果  舍弃此方法 副本传递到下一方法
//	//data, _ := c.GetRawData()
//	//d.RequestData = data
//	////解决gin框架框架的数据不能重复用的问题(拿出来后放回去)  关键点
//	//c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))
//
//	// 埋点生产者
//	DataAnalysisCh <- d
//}