You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package server
import (
"context"
"customer/api/customer"
v1 "customer/api/helloworld/v1"
"customer/internal/biz"
"customer/internal/conf"
"customer/internal/service"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/middleware/auth/jwt"
"github.com/go-kratos/kratos/v2/middleware/recovery"
"github.com/go-kratos/kratos/v2/middleware/selector"
"github.com/go-kratos/kratos/v2/transport/http"
jwtv4 "github.com/golang-jwt/jwt/v4"
)
// NewHTTPServer new an HTTP server.
func NewHTTPServer(c *conf.Server, customerService *service.CustomerService, greeter *service.GreeterService, logger log.Logger) *http.Server {
var opts = []http.ServerOption{
http.Middleware(
recovery.Recovery(),
// 自己设置的中间件
// CORS全部的请求响应都使用该中间件
selector.Server(MWCors()).Match(func(ctx context.Context, operation string) bool {
return true
}).Build(),
// JWT除了特定几个其他请求响应都是用该中间件
selector.Server(
jwt.Server(func(token *jwtv4.Token) (interface{}, error) {
return []byte(biz.CustomerSecret), nil
}),
customerJWT(customerService),
).Match(func(ctx context.Context, operation string) bool {
// 根据自己的需要完成是否启用该中间件的校验
noJWT := map[string]struct{}{
"/api.customer.Customer/Login": {},
"/api.customer.Customer/GetVerifyCode": {},
}
if _, exists := noJWT[operation]; exists {
return false
}
return true
}).Build(),
),
}
if c.Http.Network != "" {
opts = append(opts, http.Network(c.Http.Network))
}
if c.Http.Addr != "" {
opts = append(opts, http.Address(c.Http.Addr))
}
if c.Http.Timeout != nil {
opts = append(opts, http.Timeout(c.Http.Timeout.AsDuration()))
}
srv := http.NewServer(opts...)
// 注册customer的http服务
customer.RegisterCustomerHTTPServer(srv, customerService)
v1.RegisterGreeterHTTPServer(srv, greeter)
return srv
}