您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Kong serverless插件怎么用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
kong的serverless插件可以在請求的生命周期內,動態執行lua代碼。
下面來看一個刪除請求url中的jsessionid
的例子。
現在請求中有如下url導致后端服務報錯:pc/courses/jcqzf9dc;jsessionid=94DB14C127698FCAFEA6599AEE93C252/last-chapter
。 url中出現jsessionid是因為在瀏覽器不支持cookie的情況下,tomcat的url重寫。其實就算url中帶有;jsessionid=xxxxx
,在tomcat,spring boot的架構下是沒有什么問題的,但是后端框架中使用了spring security,spring security有一些安全的要求,默認情況下是不允許url中帶sessionid來維持會話的,錯誤消息為:The request was rejected because the URL contained a potentially malicious String ";"
。由于后端服務是無狀態,使用jwt來鑒權,根本不需要cookie與session,此sessionid可能是老的認證服務導致。
暫時無法找到原因,出錯的服務由網關代理,作為一個網關,改寫請求是再平常不過之功能。通常現有的插件只提供增刪改query 參數,header,body等簡單功能,對于上述情況則無能為力。通過serverless插件動態執行自己的代碼,在access階段使用如下代碼:
local url = ngx.var.upstream_uri; local sessionLength = 32; local start, last = string.find(url, ";jsessionid="); if start ~= nil then local newUrl = string.sub(url, 0, start - 1) .. string.sub(url, last + 1 + sessionLength); kong.log.err("刪除url jsessionid,原始url:", url, "修改后:", newUrl); ngx.var.upstream_uri = newUrl; end
無論jsessionid出現在url中的什么位置,把它刪除掉,然后修改upstream_uri。access階段是在匹配到路由之后,在轉發給上游服務之前,此時匹配路由的前綴已經刪除掉,要修改轉發給上游服務的url就是修改ngx.var.upstream_uri
這個變量的值。雖然lua代碼不需要分號結尾,但是要當做一段代碼在serverless中執行,必須加分號。在pre-function插件中的access階段粘貼上述代碼,即可快速,有效,無更新的暫時解決上述問題。
無后端的授時服務。
假設需要網關提供一個接口來獲取當前的時間戳。access階段是匹配到路由后,轉發給上游服務處理前。使用serverless插件,在access階段填寫如下代碼:
return kong.response.exit(200,{timestamp=os.time()})
配置一個service,此service地址可以隨便寫,因為請求根本不會轉發給這個地址,在access階段就返回響應了。再配置路由地址為/time
,即可實現返回當前時間戳。
關于Kong serverless插件怎么用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。