mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-13 18:00:00 +08:00
chore: refactor gateway middlewares (#5042)
This commit is contained in:
@@ -27,17 +27,14 @@ import (
|
|||||||
const defaultHttpScheme = "http"
|
const defaultHttpScheme = "http"
|
||||||
|
|
||||||
type (
|
type (
|
||||||
// MiddlewareFunc defines the function signature for middleware.
|
|
||||||
MiddlewareFunc func(next http.HandlerFunc) http.HandlerFunc
|
|
||||||
|
|
||||||
// Server is a gateway server.
|
// Server is a gateway server.
|
||||||
Server struct {
|
Server struct {
|
||||||
*rest.Server
|
*rest.Server
|
||||||
upstreams []Upstream
|
upstreams []Upstream
|
||||||
conns []zrpc.Client
|
conns []zrpc.Client
|
||||||
processHeader func(http.Header) []string
|
processHeader func(http.Header) []string
|
||||||
middlewares []MiddlewareFunc
|
|
||||||
dialer func(conf zrpc.RpcClientConf) zrpc.Client
|
dialer func(conf zrpc.RpcClientConf) zrpc.Client
|
||||||
|
middlewares []rest.Middleware
|
||||||
}
|
}
|
||||||
|
|
||||||
// Option defines the method to customize Server.
|
// Option defines the method to customize Server.
|
||||||
@@ -107,6 +104,13 @@ func (s *Server) build() error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) buildChainHandler(handler http.HandlerFunc) http.HandlerFunc {
|
||||||
|
for i := len(s.middlewares) - 1; i >= 0; i-- {
|
||||||
|
handler = s.middlewares[i](handler)
|
||||||
|
}
|
||||||
|
return handler
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Server) buildGrpcHandler(source grpcurl.DescriptorSource, resolver jsonpb.AnyResolver,
|
func (s *Server) buildGrpcHandler(source grpcurl.DescriptorSource, resolver jsonpb.AnyResolver,
|
||||||
cli zrpc.Client, rpcPath string) func(http.ResponseWriter, *http.Request) {
|
cli zrpc.Client, rpcPath string) func(http.ResponseWriter, *http.Request) {
|
||||||
handler := func(w http.ResponseWriter, r *http.Request) {
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
||||||
@@ -273,19 +277,12 @@ func WithHeaderProcessor(processHeader func(http.Header) []string) func(*Server)
|
|||||||
|
|
||||||
// WithMiddleware adds one or more middleware functions to process HTTP requests.
|
// WithMiddleware adds one or more middleware functions to process HTTP requests.
|
||||||
// Multiple middlewares will be executed in the order they were passed (like an onion model).
|
// Multiple middlewares will be executed in the order they were passed (like an onion model).
|
||||||
func WithMiddleware(middlewares ...MiddlewareFunc) func(*Server) {
|
func WithMiddleware(middlewares ...rest.Middleware) func(*Server) {
|
||||||
return func(s *Server) {
|
return func(s *Server) {
|
||||||
s.middlewares = append(s.middlewares, middlewares...)
|
s.middlewares = append(s.middlewares, middlewares...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) buildChainHandler(handler http.HandlerFunc) http.HandlerFunc {
|
|
||||||
for i := len(s.middlewares) - 1; i >= 0; i-- {
|
|
||||||
handler = s.middlewares[i](handler)
|
|
||||||
}
|
|
||||||
return handler
|
|
||||||
}
|
|
||||||
|
|
||||||
func buildRequestWithNewTarget(r *http.Request, target *HttpClientConf) (*http.Request, error) {
|
func buildRequestWithNewTarget(r *http.Request, target *HttpClientConf) (*http.Request, error) {
|
||||||
u := *r.URL
|
u := *r.URL
|
||||||
u.Host = target.Target
|
u.Host = target.Target
|
||||||
|
|||||||
Reference in New Issue
Block a user