增加自适应模式
This commit is contained in:
+37
-18
@@ -302,6 +302,7 @@ func (that *Application) handler(w http.ResponseWriter, req *http.Request) {
|
||||
// 没有保存就生成随机的session
|
||||
cookie, err := req.Cookie(that.Config.GetString("sessionName"))
|
||||
sessionId := Md5(strconv.Itoa(Rand(10)))
|
||||
needSetCookie := ""
|
||||
token := req.Header.Get("Authorization")
|
||||
if len(token) != 32 {
|
||||
|
||||
@@ -314,16 +315,9 @@ func (that *Application) handler(w http.ResponseWriter, req *http.Request) {
|
||||
//没有token,则查阅session
|
||||
} else if err == nil && cookie.Value != "" {
|
||||
sessionId = cookie.Value
|
||||
|
||||
//session也没有则判断是否创建cookie
|
||||
} else {
|
||||
//跨域不再通过cookie校验
|
||||
if that.Config.GetString("crossDomain") == "" {
|
||||
http.SetCookie(w, &http.Cookie{Name: that.Config.GetString("sessionName"), Value: sessionId, Path: "/"})
|
||||
} else {
|
||||
//跨域允许需要设置cookie的允许跨域https才有效果
|
||||
w.Header().Set("Set-Cookie", that.Config.GetString("sessionName")+"="+sessionId+"; Path=/; SameSite=None; Secure")
|
||||
}
|
||||
needSetCookie = sessionId
|
||||
}
|
||||
|
||||
unescapeUrl, err := url.QueryUnescape(req.RequestURI)
|
||||
@@ -342,7 +336,7 @@ func (that *Application) handler(w http.ResponseWriter, req *http.Request) {
|
||||
context.HandlerStr, context.RouterString = that.urlSer(context.HandlerStr)
|
||||
|
||||
//跨域设置
|
||||
that.crossDomain(&context)
|
||||
that.crossDomain(&context, needSetCookie)
|
||||
|
||||
defer func() {
|
||||
//是否展示日志
|
||||
@@ -356,6 +350,7 @@ func (that *Application) handler(w http.ResponseWriter, req *http.Request) {
|
||||
ipStr = req.Header.Get("X-Real-IP")
|
||||
}
|
||||
}
|
||||
|
||||
that.WebConnectLog.Infoln(ipStr, context.Req.Method,
|
||||
"time cost:", ObjToFloat64(time.Now().UnixNano()-nowUnixTime.UnixNano())/1000000.00, "ms",
|
||||
"data length:", ObjToFloat64(context.DataSize)/1000.00, "KB", context.HandlerStr)
|
||||
@@ -434,9 +429,14 @@ func (that *Application) handler(w http.ResponseWriter, req *http.Request) {
|
||||
|
||||
}
|
||||
|
||||
func (that *Application) crossDomain(context *Context) {
|
||||
func (that *Application) crossDomain(context *Context, sessionId string) {
|
||||
|
||||
//没有跨域设置
|
||||
if context.Config.GetString("crossDomain") == "" {
|
||||
if sessionId != "" {
|
||||
http.SetCookie(context.Resp, &http.Cookie{Name: that.Config.GetString("sessionName"), Value: sessionId, Path: "/"})
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -450,6 +450,10 @@ func (that *Application) crossDomain(context *Context) {
|
||||
if context.Config.GetString("crossDomain") != "auto" {
|
||||
//不跨域,则不设置
|
||||
if strings.Contains(context.Config.GetString("crossDomain"), remoteHost) {
|
||||
|
||||
if sessionId != "" {
|
||||
http.SetCookie(context.Resp, &http.Cookie{Name: that.Config.GetString("sessionName"), Value: sessionId, Path: "/"})
|
||||
}
|
||||
return
|
||||
}
|
||||
header.Set("Access-Control-Allow-Origin", that.Config.GetString("crossDomain"))
|
||||
@@ -462,22 +466,29 @@ func (that *Application) crossDomain(context *Context) {
|
||||
header.Set("Access-Control-Expose-Headers", "*")
|
||||
header.Set("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,Access-Token")
|
||||
|
||||
if sessionId != "" {
|
||||
//跨域允许需要设置cookie的允许跨域https才有效果
|
||||
context.Resp.Header().Set("Set-Cookie", that.Config.GetString("sessionName")+"="+sessionId+"; Path=/; SameSite=None; Secure")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
origin := context.Req.Header.Get("Origin")
|
||||
|
||||
refer := context.Req.Header.Get("Referer")
|
||||
if strings.Contains(origin, remoteHost) || strings.Contains(refer, remoteHost) {
|
||||
if (origin != "" && strings.Contains(origin, remoteHost)) || strings.Contains(refer, remoteHost) {
|
||||
|
||||
if sessionId != "" {
|
||||
http.SetCookie(context.Resp, &http.Cookie{Name: that.Config.GetString("sessionName"), Value: sessionId, Path: "/"})
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if origin != "" {
|
||||
header.Set("Access-Control-Allow-Origin", origin)
|
||||
//return
|
||||
}
|
||||
|
||||
if refer != "" {
|
||||
} else if refer != "" {
|
||||
tempInt := 0
|
||||
lastInt := strings.IndexFunc(refer, func(r rune) bool {
|
||||
if r == '/' && tempInt > 8 {
|
||||
@@ -493,11 +504,19 @@ func (that *Application) crossDomain(context *Context) {
|
||||
refer = Substr(refer, 0, lastInt)
|
||||
header.Set("Access-Control-Allow-Origin", refer)
|
||||
//header.Set("Access-Control-Allow-Origin", "*")
|
||||
header.Set("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE")
|
||||
header.Set("Access-Control-Allow-Credentials", "true")
|
||||
header.Set("Access-Control-Expose-Headers", "*")
|
||||
header.Set("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,Access-Token")
|
||||
|
||||
}
|
||||
|
||||
header.Set("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE")
|
||||
header.Set("Access-Control-Allow-Credentials", "true")
|
||||
header.Set("Access-Control-Expose-Headers", "*")
|
||||
header.Set("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,Access-Token")
|
||||
|
||||
if sessionId != "" {
|
||||
//跨域允许需要设置cookie的允许跨域https才有效果
|
||||
context.Resp.Header().Set("Set-Cookie", that.Config.GetString("sessionName")+"="+sessionId+"; Path=/; SameSite=None; Secure")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Init 初始化application
|
||||
|
||||
Reference in New Issue
Block a user