网站建设佰金手指科杰二八,dz怎么做视频网站,做网站要用到什么软件,为网站网站做网络维护本文是go-zero开发入门-API网关开发示例一文的延伸#xff0c;继续之前请先阅读此文。
在项目根目录下创建子目录 middleware#xff0c;在此目录下创建文件 auth.go#xff0c;内容如下#xff1a;
// 鉴权中间件
package middlewareimport (contexte…本文是go-zero开发入门-API网关开发示例一文的延伸继续之前请先阅读此文。
在项目根目录下创建子目录 middleware在此目录下创建文件 auth.go内容如下
// 鉴权中间件
package middlewareimport (contexterrorsnet/http
)var ErrInvalidToken errors.New(invalid token)func AuthMiddleware(next http.HandlerFunc) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {token : r.Header.Get(Authorization)// 调用登录服务接口生成鉴权信息// 这里只是一个示例实际需替换为实际的登录服务调用if token ! valid-token {w.Write([]byte(invalid token))return}// 将鉴权信息添加到请求上下文中ctx : context.WithValue(r.Context(), token, token)next.ServeHTTP(w, r.WithContext(ctx))}
}在网关 main.go 文件中加入鉴权中间件
package mainimport (flagfmtgateway/middlewaregithub.com/zeromicro/go-zero/core/confgithub.com/zeromicro/go-zero/gateway
)var configFile flag.String(f, etc/gateway.yaml, the config file)func main() {var c gateway.GatewayConfflag.Parse()conf.MustLoad(*configFile, c)server : gateway.MustNewServer(c)server.Use(middleware.AuthMiddleware) // 使用 server 的 Use() 方法添加全局中间件defer server.Stop()fmt.Printf(Starting server at %s:%d...\n, c.Host, c.Port)server.Start()
}在网关的配置文件 etc/gateway.yaml 中加入鉴权
Name: go-zero-gateway
Host: 0.0.0.0
Port: 9999
Upstreams:- Grpc:Etcd:Hosts:- 127.0.0.1:2379Key: add.rpcProtoSets:- /root/go-zero/gateway/proto/add.pbMappings: # Mappings can also be written in proto options- Method: getPath: /addRpcPath: add.Adder/addHeaders: - Authorization编译生成网关可执行程序文件
# cat Makefile
all: gateway
gateway: main.gogo build -o gateway main.go clean:rm -f gatewayrpc:goctl gateway -dir gateway启动网关
./gateway请求网关
# curl -i 127.0.0.1:9999/add?a1b2
HTTP/1.1 200 OK
Traceparent: 00-1cd6f9f8c902193d8dd7da646f775d0d-4959382686bbb075-00
Date: Sun, 10 Dec 2023 12:04:40 GMT
Content-Length: 13
Content-Type: text/plain; charsetutf-8invalid token