From 48611117d219bf060653ebf5c6cd67117b0ac3ba Mon Sep 17 00:00:00 2001 From: Ink Date: Tue, 12 Mar 2024 21:40:39 +0800 Subject: [PATCH] doc: update readme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新README - 优化代码 --- README.md | 3 +++ preprocess.go | 15 +++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 58ae17b..ce64a65 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ - 解析 JWT 凭证:如果 `header` 中包含字段 `Authorization`,且符合 [`Bearer `](https://swagger.io/docs/specification/authentication/bearer-authentication/) 格式 ,则会对其进行 JWT 解码,然后传递给业务逻辑层。 +- 根据特定的Cookie记录重定向。解决 [SwanHubX/habitat#121](https://github.com/SwanHubX/habitat/issues/121) + 上述功能都不会干预响应,而是将解析的身份信息放置在请求头 `payload` 上,然后逻辑层根据请求头是否含有 `payload` 参数来判断请求是否携带有效凭证。 ### 使用 @@ -79,3 +81,4 @@ http: - `AuthUrl`(可选):转发的认证接口 - `Key`(可选):RSA公钥 +- `Mark`(可选):特定的标识。例如Mark设置为 `ht-`,Cookie中有一个Key为 `ht-iop`,那么重定向时将添加路径前缀 `/iop` diff --git a/preprocess.go b/preprocess.go index e56cfec..1ad9fbc 100644 --- a/preprocess.go +++ b/preprocess.go @@ -66,10 +66,17 @@ func (p *Preprocess) ServeHTTP(rw http.ResponseWriter, req *http.Request) { if p.mark != "" && p.redirect(req, rw) { return } - // 删除可能的payload头 - req.Header.Del("payload") - p.forwardAuth(req) // 对会话进行转发验证 - p.parseJWT(req) // 对携带JWT凭证的请求进行解析 + if p.url != "" || p.publicKey != nil { + // 删除可能存在的payload头 + req.Header.Del("payload") + } + if p.url != "" { + // 对会话进行转发认证 + p.forwardAuth(req) + } else if p.publicKey != nil { + // 对携带JWT凭证的请求进行解析 + p.parseJWT(req) + } p.addTraceId(req, rw) // 对请求添加traceId p.next.ServeHTTP(rw, req) }