# interceptor-通用grpcInterceptor ## 说明 > http请求和响应封装 > - request > - 验证前端参数签名 > - response > - ResponseEncoderWithEncrypt 正式服加密后端响应参数 > - bff原样返回server错误及自身业务错误,正式服其它错误统一返回InternalServerError ## 使用示例 ### http ```go package server import ( userV1 "gitea.drugeyes.vip/ebm/ebm-bff/api/v1/user" "gitea.drugeyes.vip/ebm/ebm-bff/internal/conf" "gitea.drugeyes.vip/ebm/ebm-bff/internal/service" trace "gitea.drugeyes.vip/ebm/ebm-bff/middleware/trace" http1 "gitea.drugeyes.vip/pharnexbase/utils/transport/v1/http" "github.com/go-kratos/kratos/v2/log" "github.com/go-kratos/kratos/v2/middleware/logging" "github.com/go-kratos/kratos/v2/middleware/recovery" "github.com/go-kratos/kratos/v2/middleware/tracing" "github.com/go-kratos/kratos/v2/middleware/validate" "github.com/go-kratos/kratos/v2/transport/http" "github.com/gorilla/handlers" ) // NewHTTPServer new HTTP server. func NewHTTPServer( c *conf.Bootstrap, user *service.UserService, logger log.Logger) *http.Server { headersOk := handlers.AllowedHeaders([]string{ "Content-Type", "X-Requested-With", "Authorization", "User-Agent", "Accept", "Referer", "Client-Version"}) originsOk := handlers.AllowedOrigins([]string{"*"}) methodsOk := handlers.AllowedMethods([]string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"}) httpTrans := http1.NewTransport(c.Env, "sm4Key", "apiKey") var opts = []http.ServerOption{ http.Filter(handlers.CORS(headersOk, originsOk, methodsOk)), http.RequestDecoder(httpTrans.RequestDecoder()), // body解码 http.RequestQueryDecoder(httpTrans.RequestQueryDecoder()), // query解码 http.ResponseEncoder(httpTrans.ResponseEncoder()), // 正常响应 http.ErrorEncoder(httpTrans.ErrorEncoder()), // 错误响应 http.Middleware( recovery.Recovery(), tracing.Server(), logging.Server(logger), validate.Validator(), trace.SetTraceIdToHeader, ), } if c.Server.Http.Network != "" { opts = append(opts, http.Network(c.Server.Http.Network)) } if c.Server.Http.Addr != "" { opts = append(opts, http.Address(c.Server.Http.Addr)) } if c.Server.Http.Timeout != nil { opts = append(opts, http.Timeout(c.Server.Http.Timeout.AsDuration())) } srv := http.NewServer(opts...) userV1.RegisterUserCenterHTTPServer(srv, user) return srv } ```