HttpServletRequest參數(shù)丟失問題及解決
HttpServletRequest參數(shù)丟失
遇到一個奇怪的問題
測試環(huán)境沒有出現(xiàn),本地連正式數(shù)據(jù)庫也沒復(fù)現(xiàn)。
主要業(yè)務(wù)邏輯是通過篩選條件從數(shù)據(jù)庫導(dǎo)出一批數(shù)據(jù)。異常情況是,選擇的篩選條件失效了,導(dǎo)致導(dǎo)出了全量數(shù)據(jù),這搞不好會有數(shù)據(jù)泄露風(fēng)險。
已知列表分頁查詢是沒有問題的
篩選條件都能生效,代碼如下:

但是導(dǎo)出時卻沒起作用,導(dǎo)出代碼:

觀察可知,他們都調(diào)用的getSqlMap方法,該方法具體作用就是從HttpServletRequest中獲取相關(guān)條件參數(shù),并放到Map中,供后續(xù)查詢代碼使用,如下:

按常理推斷
輸入和代碼一致,得到的結(jié)果應(yīng)該是一致的,但是卻不是這樣
使用jvm神器arthas,watch一下getSqlMap方法,然后分別調(diào)用列表查詢和導(dǎo)出接口,得到如下兩條記錄

對比可知,上面有的很多參數(shù),下面一條都沒有,那么參數(shù)怎么會消失呢?數(shù)據(jù)都是從HttpServletRequest對象中獲取的,那么這個對象里面的數(shù)據(jù)怎么消失了呢?
細心的網(wǎng)友可能注意到了
我們導(dǎo)出方式是異步的,關(guān)鍵在@Async注解

難道莫非,HttpServletRequest被回收了,果然網(wǎng)上搜一下,很多案例


比較官方的說明
不推薦在異步中使用request,會得到不確定的結(jié)果

因此,我們需要在異步方法前提取參數(shù),再傳入

小小的問題,大大的疑惑。花了不少時間定位問題,好在爬出了坑。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot開發(fā)擴展springmvc實現(xiàn)解析
這篇文章主要介紹了springboot開發(fā)擴展springmvc實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
MyBatis實現(xiàn)動態(tài)SQL更新的代碼示例
本文博小編將帶領(lǐng)大家學(xué)習(xí)如何利用 MyBatis 攔截器機制來優(yōu)雅的實現(xiàn)這個需求,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2023-07-07
springboot斷言異常封裝與統(tǒng)一異常處理實現(xiàn)代碼
異常處理其實一直都是項目開發(fā)中的大頭,但關(guān)注異常處理的人一直都特別少,下面這篇文章主要給大家介紹了關(guān)于springboot斷言異常封裝與統(tǒng)一異常處理的相關(guān)資料,需要的朋友可以參考下2023-01-01
Jmeter參數(shù)化實現(xiàn)方法及應(yīng)用實例
這篇文章主要介紹了Jmeter參數(shù)化實現(xiàn)方法及應(yīng)用實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
SpringBoot+Mybatis實現(xiàn)登錄注冊的示例代碼
這篇文章主要介紹了SpringBoot+Mybatis實現(xiàn)登錄注冊的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
SpringMVC JSON數(shù)據(jù)傳輸參數(shù)超詳細講解
有時候參數(shù)的傳遞還需要更多的參數(shù),比如一個獲取用戶信息的請求中既有用戶ID等基本參數(shù),還要求對查詢結(jié)果進行分頁,針對這種場景,一般都會將分頁參數(shù)封裝成一個對象,然后將它和基本參數(shù)一起傳給控制器2023-02-02
mybatis查詢到了數(shù)據(jù),但是實體類個別字段為null問題
這篇文章主要介紹了mybatis查詢到了數(shù)據(jù),但是實體類個別字段為null問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

