1 回答

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
處理程序中的調(diào)用不能提前終止后者。相反,您應(yīng)該定義為中間件(另請參閱裝飾器模式):CheckPermissionFilter
SomeHttpHandler
CheckPermissionFilter
package main
import (
"net/http"
)
func main() {
http.Handle("/foo", CheckPermissionFilter(SomeHttpHandler))
// ...
}
func CheckPermissionFilter(h http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
sid, err := r.Cookie("sid")
// handle err
if !Validate(sid) {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
h(w, r)
})
}
func SomeHttpHandler(w http.ResponseWriter, r *http.Request) {
// ...
}
func Validate(sid string) bool {
return true // simplistic implementation for this example
}
- 1 回答
- 0 關(guān)注
- 72 瀏覽
添加回答
舉報