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 //}