From: qydysky Date: Wed, 19 Mar 2025 02:41:13 +0000 (+0000) Subject: 1 X-Git-Tag: v0.1.20250319024256 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=f503898317c1d280704e453e93e8588c7863efb8;p=front%2F.git 1 --- diff --git a/config.go b/config.go index 6f0e80b..5a0ab43 100755 --- a/config.go +++ b/config.go @@ -193,7 +193,12 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { return } - var backIs []*Back + var ( + backIs []*Back + backEqual = func(a, b *Back) bool { + return a == b + } + ) { if t, e := r.Cookie("_psign_" + cookie); e == nil { @@ -213,7 +218,7 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { logger.Warn(`W:`, fmt.Sprintf(logFormat, reqId, r.RemoteAddr, route.config.Addr, routePath, "Err", e)) } else if ok { for i := uint(0); i < backP.(*Back).Weight; i++ { - backIs = append(backIs, backP.(*Back)) + backIs = addIfNotExsit(backIs, backEqual, backP.(*Back)) } } } @@ -221,7 +226,7 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { var splicingC = len(backIs) - backIs = append(backIs, route.FiliterBackByRequest(r)...) + backIs = addIfNotExsit(backIs, backEqual, route.FiliterBackByRequest(r)...) if f, ok := rollRuleMap[route.RollRule]; ok { f(backIs[splicingC:]) @@ -604,3 +609,15 @@ func LoadX509PubKey(certPEMBlock []byte) tls.Certificate { } return cert } + +func addIfNotExsit[T []E, E any](s T, equal func(a, b E) bool, e ...E) T { + for j := 0; j < len(e); j++ { + for i := 0; i < len(s); i++ { + if !equal(s[i], e[j]) { + s = append(s, e[j]) + break + } + } + } + return s +}