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

但是導(dǎo)出時(shí)卻沒(méi)起作用,導(dǎo)出代碼:

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

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

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

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


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

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

小小的問(wèn)題,大大的疑惑。花了不少時(shí)間定位問(wèn)題,好在爬出了坑。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決BeanUtils.copyProperties不支持復(fù)制集合的問(wèn)題
這篇文章主要介紹了解決BeanUtils.copyProperties不支持復(fù)制集合的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java?HashSet的Removals()方法注意事項(xiàng)
這篇文章主要介紹了Java?HashSet的Removals()方法注意事項(xiàng),文章圍繞制主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Spring核心IoC容器的依賴注入接口和層級(jí)包命名規(guī)范
這篇文章主要介紹了Spring核心IoC容器的依賴注入接口和層級(jí)包命名規(guī)范,IOC又名控制反轉(zhuǎn),把對(duì)象創(chuàng)建和對(duì)象之間的調(diào)用過(guò)程,交給Spring進(jìn)行管理,目的是為了降低耦合度,需要的朋友可以參考下2023-05-05
Spring Security登錄接口兼容JSON格式登錄實(shí)現(xiàn)示例
前后端分離中,前端和后端的數(shù)據(jù)交互通常是JSON格式,本文主要介紹了Spring Security登錄接口兼容JSON格式登錄實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
java實(shí)現(xiàn)點(diǎn)擊按鈕事件彈出子窗口
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)點(diǎn)擊按鈕事件彈出子窗口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
jpa多數(shù)據(jù)源時(shí)Hibernate配置自動(dòng)生成表不生效的解決
這篇文章主要介紹了jpa多數(shù)據(jù)源時(shí)Hibernate配置自動(dòng)生成表不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java并行執(zhí)行任務(wù)的幾種方案小結(jié)
這篇文章主要介紹了Java并行執(zhí)行任務(wù)的幾種方案小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Spring中常見(jiàn)的7種BeanDefinition詳解
在?Spring?容器中,我們廣泛使用的是一個(gè)一個(gè)的?Bean,BeanDefinition?從名字上就可以看出是關(guān)于?Bean?的定義,下面就跟隨小編一起深入了解一下常見(jiàn)的7中BeanDefinition吧2023-09-09
servlet3新特性_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了servlet3新特性的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

