diff --git a/server/admin/api_base.go b/server/admin/api_base.go index 3844458..6784d78 100644 --- a/server/admin/api_base.go +++ b/server/admin/api_base.go @@ -3,6 +3,7 @@ package admin import ( "fmt" "net/http" + "runtime/debug" "time" "github.com/bjdgyc/anylink/base" @@ -120,3 +121,17 @@ func authMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(fn) } + +func recoverHttp(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer func() { + if err := recover(); err != nil { + stack := debug.Stack() + base.Error(err, string(stack)) + // http.Error(w, "Internal Server Error", 500) + RespError(w, 500, "Internal Server Error") + } + }() + next.ServeHTTP(w, r) + }) +} diff --git a/server/admin/server.go b/server/admin/server.go index dae1a66..5f0dd64 100644 --- a/server/admin/server.go +++ b/server/admin/server.go @@ -21,6 +21,7 @@ var UiData embed.FS func StartAdmin() { r := mux.NewRouter() + r.Use(recoverHttp, authMiddleware, handlers.CompressHandler) // 所有路由添加安全头 r.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { @@ -29,8 +30,6 @@ func StartAdmin() { next.ServeHTTP(w, req) }) }) - r.Use(authMiddleware) - r.Use(handlers.CompressHandler) // 监控检测 r.HandleFunc("/status.html", func(w http.ResponseWriter, r *http.Request) { diff --git a/server/conf/server-sample.toml b/server/conf/server-sample.toml index 87ed29f..2413925 100644 --- a/server/conf/server-sample.toml +++ b/server/conf/server-sample.toml @@ -51,6 +51,9 @@ admin_addr = ":8800" #开启tcp proxy protocol协议 proxy_protocol = false +#开启go标准库http.Server的日志 +http_server_log=false + #虚拟网络类型[tun macvtap tap] link_mode = "tun" diff --git a/server/dbdata/userauth_radius.go b/server/dbdata/userauth_radius.go index d52e434..f0e3b86 100644 --- a/server/dbdata/userauth_radius.go +++ b/server/dbdata/userauth_radius.go @@ -75,8 +75,11 @@ func (auth AuthRadius) checkUser(name, pwd string, g *Group, ext map[string]inte return fmt.Errorf("%s %s", name, "Radius set nasip 出现错误") } } - macAddr := ext["mac_addr"].(string) - base.Trace("AuthRadius", ext, macAddr) + macAddr := "" + if ext["mac_addr"] != nil { + macAddr = ext["mac_addr"].(string) + base.Trace("AuthRadius", ext, macAddr) + } if macAddr != "" { err = rfc2865.CallingStationID_AddString(packet, macAddr) if err != nil { @@ -94,5 +97,4 @@ func (auth AuthRadius) checkUser(name, pwd string, g *Group, ext map[string]inte return fmt.Errorf("%s %s", name, "Radius:用户名或密码错误") } return nil - }