feat(server): 添加全局指令处理功能
- 新增 http-jump.json 配置文件 - 实现 ServerMux 结构体的全局指令处理机制 - 添加 wrappedServerHandler 字段用于全局指令处理 - 修改 ServeHTTP 方法以支持全局指令处理 - 在 NewServeMux 函数中完成全局指令处理的初始化
This commit is contained in:
parent
6bff86a5bc
commit
9ff927d323
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "http-jump",
|
||||||
|
"server": "localhost",
|
||||||
|
"port": 8083,
|
||||||
|
"directives":[
|
||||||
|
"Redirect https://playground.kingecg.top"
|
||||||
|
],
|
||||||
|
"paths": [
|
||||||
|
]
|
||||||
|
}
|
|
@ -210,17 +210,18 @@ func NewRestMux(path string) *RestMux {
|
||||||
|
|
||||||
type ServerMux struct {
|
type ServerMux struct {
|
||||||
http.Handler
|
http.Handler
|
||||||
directiveHandlers *MiddlewareLink
|
directiveHandlers *MiddlewareLink
|
||||||
handlers map[string]http.Handler
|
handlers map[string]http.Handler
|
||||||
paths []string
|
paths []string
|
||||||
wrappedHandler map[string]http.Handler
|
wrappedHandler map[string]http.Handler
|
||||||
|
wrappedServerHandler http.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ServerMux) Handle(pattern string, handler http.Handler, directives []string) {
|
func (s *ServerMux) Handle(pattern string, handler http.Handler, directives []string) {
|
||||||
if s.handlers == nil {
|
if s.handlers == nil {
|
||||||
s.handlers = make(map[string]http.Handler)
|
s.handlers = make(map[string]http.Handler)
|
||||||
}
|
}
|
||||||
nMiddleWareLink := s.directiveHandlers.Clone()
|
nMiddleWareLink := NewMiddlewareLink()
|
||||||
for _, directive := range directives {
|
for _, directive := range directives {
|
||||||
strs := strings.Split(directive, " ")
|
strs := strings.Split(directive, " ")
|
||||||
directiveName := strs[0]
|
directiveName := strs[0]
|
||||||
|
@ -264,6 +265,13 @@ func (s *ServerMux) getHandler(path string) http.Handler {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (s *ServerMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (s *ServerMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if s.wrappedServerHandler != nil {
|
||||||
|
s.wrappedServerHandler.ServeHTTP(w, r)
|
||||||
|
} else {
|
||||||
|
s.serveHTTP(w, r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (s *ServerMux) serveHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
l := logger.GetLogger("Access")
|
l := logger.GetLogger("Access")
|
||||||
data := map[string]interface{}{}
|
data := map[string]interface{}{}
|
||||||
c := r.Context()
|
c := r.Context()
|
||||||
|
@ -317,6 +325,7 @@ func NewServeMux(c *model.HttpServerConfig) *ServerMux {
|
||||||
// 将指令添加到 ServerMux 的指令处理中间件链中
|
// 将指令添加到 ServerMux 的指令处理中间件链中
|
||||||
s.AddDirective(string(directive))
|
s.AddDirective(string(directive))
|
||||||
}
|
}
|
||||||
|
s.wrappedServerHandler = s.directiveHandlers.WrapHandler(http.HandlerFunc(s.serveHTTP))
|
||||||
// if c.AuthType == "jwt" {
|
// if c.AuthType == "jwt" {
|
||||||
// s.AddDirective("Jwt-Auth")
|
// s.AddDirective("Jwt-Auth")
|
||||||
// }
|
// }
|
||||||
|
|
Loading…
Reference in New Issue