cookie转metadata
package middleware
import (
"context"
"github.com/go-kratos/kratos/v2/metadata"
"github.com/go-kratos/kratos/v2/middleware"
"github.com/go-kratos/kratos/v2/transport"
khttp "github.com/go-kratos/kratos/v2/transport/http"
)
func CookieToMetadataMiddleware() middleware.Middleware {
return func(handler middleware.Handler) middleware.Handler {
return func(ctx context.Context, req interface{}) (reply interface{}, err error) {
tr, ok := transport.FromServerContext(ctx)
if !ok {
return nil, err
}
if tr.Kind() != transport.KindHTTP {
return nil, err
}
info, ok := tr.(*khttp.Transport)
if !ok {
return nil, err
}
// http打印信息
request := info.Request()
rsSubCookie, _ := request.Cookie("rs_subscript")
if rsSubCookie != nil {
// 将 Cookie 存储到 metadata 中
ctx = metadata.AppendToClientContext(ctx, "rs_subscript", rsSubCookie.Value)
}
reply, err = handler(ctx, req)
return
}
}
}
cookie存储
//其他app请求链接
func (s *ApiService) Recommend(ctx *gin.Context) {
appName := strings.Trim(ctx.Param("appName"), "/")
if appName != "xxx" {
//目前之和xxx合作
ctx.JSON(http.StatusBadRequest, gin.H{"msg": "bad request"})
return
}
//App安装页
jumpUrl := fmt.Sprintf("https://apps.xxx.com/xxx?utm_source=%s&utm_campaign=plan", appName)
cookieMaxAge := 86400 * 30 //cookie 的最大存活时间,以秒为单位
firstDomain := ".xxx.com"
ctx.SetCookie("cookie_temp_key", "100", cookieMaxAge, "/", firstDomain, false, true)
//time.Sleep(time.Millisecond * 500)
ctx.Redirect(http.StatusMovedPermanently, jumpUrl)
}