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

但是導出時卻沒起作用,導出代碼:

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

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

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

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


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

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

小小的問題,大大的疑惑?;瞬簧贂r間定位問題,好在爬出了坑。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決BeanUtils.copyProperties不支持復制集合的問題
這篇文章主要介紹了解決BeanUtils.copyProperties不支持復制集合的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Spring核心IoC容器的依賴注入接口和層級包命名規(guī)范
這篇文章主要介紹了Spring核心IoC容器的依賴注入接口和層級包命名規(guī)范,IOC又名控制反轉,把對象創(chuàng)建和對象之間的調用過程,交給Spring進行管理,目的是為了降低耦合度,需要的朋友可以參考下2023-05-05
Spring Security登錄接口兼容JSON格式登錄實現(xiàn)示例
前后端分離中,前端和后端的數(shù)據(jù)交互通常是JSON格式,本文主要介紹了Spring Security登錄接口兼容JSON格式登錄實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-01-01
jpa多數(shù)據(jù)源時Hibernate配置自動生成表不生效的解決
這篇文章主要介紹了jpa多數(shù)據(jù)源時Hibernate配置自動生成表不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02

