You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by me...@apache.org on 2020/12/07 13:53:26 UTC
[apisix] branch master updated: fix: refresh cached header when we
set request header (#2917)
This is an automated email from the ASF dual-hosted git repository.
membphis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git
The following commit(s) were added to refs/heads/master by this push:
new 97ed426 fix: refresh cached header when we set request header (#2917)
97ed426 is described below
commit 97ed426b4ef4d403213d78b3e4883f1b238f3c8a
Author: 罗泽轩 <sp...@gmail.com>
AuthorDate: Mon Dec 7 21:50:31 2020 +0800
fix: refresh cached header when we set request header (#2917)
---
apisix/core/request.lua | 17 ++++++++++++++++-
apisix/plugins/hmac-auth.lua | 6 +++---
apisix/plugins/request-id.lua | 2 +-
apisix/plugins/wolf-rbac.lua | 6 +++---
apisix/plugins/zipkin.lua | 2 +-
t/core/request.t | 24 ++++++++++++++++++++++++
6 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/apisix/core/request.lua b/apisix/core/request.lua
index 2e5af94..f359460 100644
--- a/apisix/core/request.lua
+++ b/apisix/core/request.lua
@@ -68,12 +68,27 @@ function _M.header(ctx, name)
end
-function _M.set_header(header_name, header_value)
+function _M.set_header(ctx, header_name, header_value)
+ if type(ctx) == "string" then
+ -- It would be simpler to keep compatibility if we put 'ctx'
+ -- after 'header_value', but the style is too ugly!
+ header_value = header_name
+ header_name = ctx
+ ctx = nil
+
+ log.warn("DEPRECATED: use set_header(ctx, header_name, header_value) instead")
+ end
+
local err
header_name, err = _validate_header_name(header_name)
if err then
error(err)
end
+
+ if ctx and ctx.headers then
+ ctx.headers[header_name] = header_value
+ end
+
ngx.req.set_header(header_name, header_value)
end
diff --git a/apisix/plugins/hmac-auth.lua b/apisix/plugins/hmac-auth.lua
index c11d31f..15e19a3 100644
--- a/apisix/plugins/hmac-auth.lua
+++ b/apisix/plugins/hmac-auth.lua
@@ -117,12 +117,12 @@ local function array_to_map(arr)
end
-local function remove_headers(...)
+local function remove_headers(ctx, ...)
local headers = { ... }
if headers and #headers > 0 then
for _, header in ipairs(headers) do
core.log.info("remove_header: ", header)
- core.request.set_header(header, nil)
+ core.request.set_header(ctx, header, nil)
end
end
end
@@ -389,7 +389,7 @@ local function get_params(ctx)
core.log.info("keep_headers: ", keep_headers)
if not keep_headers then
- remove_headers(signature_key, algorithm_key, signed_headers_key)
+ remove_headers(ctx, signature_key, algorithm_key, signed_headers_key)
end
core.log.info("params: ", core.json.delay_encode(params))
diff --git a/apisix/plugins/request-id.lua b/apisix/plugins/request-id.lua
index 0de07fa..60e590a 100644
--- a/apisix/plugins/request-id.lua
+++ b/apisix/plugins/request-id.lua
@@ -45,7 +45,7 @@ function _M.rewrite(conf, ctx)
local headers = ngx.req.get_headers()
local uuid_val = uuid()
if not headers[conf.header_name] then
- core.request.set_header(conf.header_name, uuid_val)
+ core.request.set_header(ctx, conf.header_name, uuid_val)
end
if conf.include_in_response then
diff --git a/apisix/plugins/wolf-rbac.lua b/apisix/plugins/wolf-rbac.lua
index 4966601..20392e9 100644
--- a/apisix/plugins/wolf-rbac.lua
+++ b/apisix/plugins/wolf-rbac.lua
@@ -307,9 +307,9 @@ function _M.rewrite(conf, ctx)
core.response.set_header(prefix .. "UserId", userId)
core.response.set_header(prefix .. "Username", username)
core.response.set_header(prefix .. "Nickname", ngx.escape_uri(nickname))
- core.request.set_header(prefix .. "UserId", userId)
- core.request.set_header(prefix .. "Username", username)
- core.request.set_header(prefix .. "Nickname", ngx.escape_uri(nickname))
+ core.request.set_header(ctx, prefix .. "UserId", userId, ctx)
+ core.request.set_header(ctx, prefix .. "Username", username)
+ core.request.set_header(ctx, prefix .. "Nickname", ngx.escape_uri(nickname))
end
if res.status ~= 200 then
diff --git a/apisix/plugins/zipkin.lua b/apisix/plugins/zipkin.lua
index dced36c..fc75f8d 100644
--- a/apisix/plugins/zipkin.lua
+++ b/apisix/plugins/zipkin.lua
@@ -164,7 +164,7 @@ function _M.access(conf, ctx)
local outgoing_headers = {}
tracer:inject(opentracing.proxy_span, "http_headers", outgoing_headers)
for k, v in pairs(outgoing_headers) do
- core.request.set_header(k, v)
+ core.request.set_header(ctx, k, v)
end
end
diff --git a/t/core/request.t b/t/core/request.t
index 5f6fd7e..fb4c4c6 100644
--- a/t/core/request.t
+++ b/t/core/request.t
@@ -354,3 +354,27 @@ X-Real-IP: 10.0.0.1
1.1
--- no_error_log
[error]
+
+
+
+=== TEST 10: set header
+--- config
+ location = /hello {
+ content_by_lua_block {
+ local core = require("apisix.core")
+ ngx.ctx.api_ctx = {}
+ local h = core.request.header(nil, "Test")
+ local ctx = ngx.ctx.api_ctx
+ core.request.set_header(ctx, "Test", "t")
+ local h2 = core.request.header(ctx, "Test")
+ ngx.say(h)
+ ngx.say(h2)
+ }
+ }
+--- request
+GET /hello
+--- response_body
+nil
+t
+--- no_error_log
+[error]