20 Star 167 Fork 28

qiqi/orange

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
middleware.go 1.24 KB
一键复制 编辑 原始数据 按行查看 历史
qiqi 提交于 2019-11-07 17:12 . 添加项目模板
package app
import (
"gitee.com/zhucheer/orange/encrypt"
"gitee.com/zhucheer/orange/session"
"time"
)
// MiddlewareFunc defines a function to process middleware.
type MiddlewareFunc func(HandlerFunc) HandlerFunc
type HandlerFunc func(*Context) error
type MiddleWare interface {
Func() MiddlewareFunc
}
// 翻转中间件,因执行时是从最外层函数开始,定义时需要从最后一个中间件开始定义
func reverseMiddleWare(middlewares []MiddleWare) []MiddleWare {
length := len(middlewares)
for i := 0; i < length/2; i++ {
middlewares[length-1-i], middlewares[i] = middlewares[i], middlewares[length-1-i]
}
return middlewares
}
func startCsrfToken(session session.Store) string {
csrfToken := getAppKey() + time.Now().String()
csrfTokenMd5 := encrypt.Md5ToUpper(csrfToken)
sessionKey := "CSRF-TOKEN"
if token := session.Get(sessionKey); token != nil {
return token.(string)
}
session.Set(sessionKey, csrfTokenMd5)
return csrfTokenMd5
}
func checkCsrfToken(next HandlerFunc) HandlerFunc {
return func(c *Context) error {
tokenInHeader := c.request.Header.Get("CSRF-TOKEN")
if c.request.Method == "POST" && tokenInHeader != c.CsrfToken {
return c.ResponseWrite([]byte("csrf token verify error"))
}
return next(c)
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/zhucheer/orange.git
git@gitee.com:zhucheer/orange.git
zhucheer
orange
orange
v0.2.19

搜索帮助