|
@@ -13,7 +13,6 @@ import (
|
|
|
"github.com/gogf/gf/v2/net/ghttp"
|
|
|
"github.com/gogf/gf/v2/os/gcfg"
|
|
|
"github.com/gogf/gf/v2/os/gctx"
|
|
|
- "log"
|
|
|
"net/http"
|
|
|
"net/url"
|
|
|
)
|
|
@@ -76,9 +75,11 @@ var proxyHandler = func(r *ghttp.Request) {
|
|
|
for i := 0; i < errTryTime; i++ {
|
|
|
var proxyAddr *url.URL
|
|
|
var err error
|
|
|
+ var changeFunc func(resp *http.Response) error
|
|
|
if gCtx.RouterRule.IsOutServer {
|
|
|
//外部服务直接获取
|
|
|
proxyAddr, err = bManager.GetOutSeverAutoLogin(gCtx.RouterRule.MiddleCode, r)
|
|
|
+ changeFunc = broker.UnLoginSetErr //当未登录时,通过处罚异常尝试重新加载
|
|
|
} else {
|
|
|
// 从etcd注册的地址,根据负载规则获取服务地址
|
|
|
proxyAddr, err = bManager.GetServerAddr(gCtx.RouterRule.MiddleCode, r.GetClientIp())
|
|
@@ -103,19 +104,18 @@ var proxyHandler = func(r *ghttp.Request) {
|
|
|
}
|
|
|
g.Log().Error(r.Context(), "ErrorHandler ", err)
|
|
|
}
|
|
|
- log.Println("xxxx", r.Request.Header.Get("Cookie"))
|
|
|
+
|
|
|
// 代理请求
|
|
|
- proxyClient.CreateCustomProxyClient(proxyAddr, errHandel).ServeHTTP(r.Response.ResponseWriter, r.Request)
|
|
|
+ proxyClient.CreateCustomProxyClient(proxyAddr, errHandel, changeFunc).ServeHTTP(r.Response.ResponseWriter, r.Request)
|
|
|
+
|
|
|
+ if gCtx.RouterRule.IsOutServer { //检测外部服务登录状态是否过期
|
|
|
+ if bManager.CheckOutSeverLoginOut(gCtx.RouterRule.MiddleCode, r) || hasErr {
|
|
|
+ if err := bManager.OutSeverLoginIn(gCtx.RouterRule.MiddleCode); err != nil {
|
|
|
+ g.Log().Errorf(r.GetCtx(), "%s 外部服务自动登录异常 %v \n", gCtx.RouterRule.MiddleCode, err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //if gCtx.RouterRule.IsOutServer {
|
|
|
- // if r.Response.Status == 401 {
|
|
|
- // hasErr = true
|
|
|
- // log.Println("do login Again")
|
|
|
- // r.Request.Header.Set("Cookie", "JSESSIONID=A4745CB36FA67EE15BA162033B0343F5")
|
|
|
- // r.Response.Flush()
|
|
|
- // }
|
|
|
- //}
|
|
|
- //log.Println("qqqqq", r.Request.RequestURI, r.Response.Status)
|
|
|
// 未捕获到请求,标识请求成功
|
|
|
if !hasErr {
|
|
|
return
|