权限验证优化

This commit is contained in:
lifeiyi
2020-01-10 10:48:39 +08:00
parent 15339770ed
commit f824fddcad

View File

@@ -40,7 +40,6 @@ type HttpRequest struct {
} }
type HttpRespone struct { type HttpRespone struct {
Respone []byte Respone []byte
RedirectData HttpRedirectData RedirectData HttpRedirectData
@@ -48,6 +47,7 @@ type HttpRespone struct {
} }
type ServeHTTPRouterMux struct { type ServeHTTPRouterMux struct {
httpfiltrateList []HttpFiltrate
} }
type ControllerMapsType map[string]reflect.Value type ControllerMapsType map[string]reflect.Value
@@ -60,7 +60,7 @@ type HttpServerService struct {
certfile string certfile string
keyfile string keyfile string
ishttps bool ishttps bool
httpfiltrateList []HttpFiltrate serverHTTPMux ServeHTTPRouterMux
} }
type RouterMatchData struct { type RouterMatchData struct {
@@ -183,7 +183,8 @@ func Get(url string, handle HttpHandle) error {
} }
func (slf *HttpServerService) OnInit() error { func (slf *HttpServerService) OnInit() error {
slf.httpserver.Init(slf.port, &ServeHTTPRouterMux{}, 10*time.Second, 10*time.Second) slf.serverHTTPMux = ServeHTTPRouterMux{}
slf.httpserver.Init(slf.port, &slf.serverHTTPMux, 10*time.Second, 10*time.Second)
if slf.ishttps == true { if slf.ishttps == true {
slf.httpserver.SetHttps(slf.certfile, slf.keyfile) slf.httpserver.SetHttps(slf.certfile, slf.keyfile)
} }
@@ -197,6 +198,22 @@ func (slf *ServeHTTPRouterMux) ServeHTTP(w http.ResponseWriter, r *http.Request)
return return
} }
//权限验证
var errRet error
for _, filter := range slf.httpfiltrateList {
ret := filter(r.URL.Path, w, r)
if ret == nil {
errRet = nil
break
} else {
errRet = ret
}
}
if errRet != nil {
writeRespone(w, http.StatusOK, errRet.Error())
return
}
url := strings.Trim(r.URL.Path, "/") url := strings.Trim(r.URL.Path, "/")
var strCallPath string var strCallPath string
matchData, ok := methodRouter[url] matchData, ok := methodRouter[url]
@@ -284,7 +301,7 @@ func writeRespone(w http.ResponseWriter, status int, msg string) {
type HttpFiltrate func(path string, w http.ResponseWriter, r *http.Request) error type HttpFiltrate func(path string, w http.ResponseWriter, r *http.Request) error
func (slf *HttpServerService) AppendHttpFiltrate(fun HttpFiltrate) bool { func (slf *HttpServerService) AppendHttpFiltrate(fun HttpFiltrate) bool {
slf.httpfiltrateList = append(slf.httpfiltrateList, fun) slf.serverHTTPMux.httpfiltrateList = append(slf.serverHTTPMux.httpfiltrateList, fun)
return false return false
} }
@@ -356,12 +373,10 @@ func staticServer(routerUrl string, routerData RouterStaticResoutceData, w http.
errRet = ret errRet = ret
} }
} }
if errRet != nil { if errRet != nil {
w.Write([]byte(errRet.Error())) w.Write([]byte(errRet.Error()))
return return
} }
r.ParseMultipartForm(32 << 20) // max memory is set to 32MB r.ParseMultipartForm(32 << 20) // max memory is set to 32MB
resourceFile, resourceFileHeader, err := r.FormFile("file") resourceFile, resourceFileHeader, err := r.FormFile("file")
if err != nil { if err != nil {
@@ -387,9 +402,7 @@ func staticServer(routerUrl string, routerData RouterStaticResoutceData, w http.
return return
} }
defer localfd.Close() defer localfd.Close()
io.Copy(localfd, resourceFile) io.Copy(localfd, resourceFile)
writeResp(http.StatusOK, upath+fileName)*/ writeResp(http.StatusOK, upath+fileName)*/
} }
@@ -464,9 +477,6 @@ func (slf *HttpRespone) Redirect(url string,cookieList []*http.Cookie) {
slf.RedirectData.CookieList = cookieList slf.RedirectData.CookieList = cookieList
} }
func (slf *HttpRespone) redirects(w *http.ResponseWriter, req *http.Request) { func (slf *HttpRespone) redirects(w *http.ResponseWriter, req *http.Request) {
if slf.RedirectData.CookieList != nil { if slf.RedirectData.CookieList != nil {
for _, v := range slf.RedirectData.CookieList { for _, v := range slf.RedirectData.CookieList {