开发者

HttpServletRequest参数丢失问题及解决

开发者 https://www.devze.com 2025-11-05 11:58 出处:网络 作者: 呼哇呼哇time
目录HttpServletRequest参数丢失遇到一个奇怪的问题已知列表分页查询是没有问题的按常理推断细心的网友可能注意到了比较官方的说明总结HttpServletRequest参数丢失
目录
  • HttpServletRequest参数丢失
    • 遇到一个奇怪的问题
    • 已知列表分页查询是没有问题的
    • 按常理推断
    • 细心的网友可能注意到了
    • 比较官方的说明
  • 总结

    HttpServletRequest参数丢失

    遇到一个奇怪的问题

    测试环境没有出现,本地连正式数据库也没复现。

    主要业务逻辑是通过筛选条件从数据库导出一批数据。异编程客栈常情况是,选择的筛选条件失效了,导致导http://www.devze.com出了全量数据,这搞不好会有数据泄露风险。

    已知列表分页查询是没有问题的

    筛选条件都能生效,代码如下:

    HttpServletRequest参数丢失问题及解决

    但是导出时却没起作用,导出代码:

    HttpServletRequest参数丢失问题及解决

    观察可知,他们都调用的getSqlMap方法,该方法具体作用就是从HttpServletRequest中获取相关条件参数,并放到Map中,供后续查询代码使用,如下:

    HttpServletRequest参数丢失问题及解决

    按常python理推断

    输入和代码一致,得到的结果应该是一致的,但是却不是这样

    使用jvm神器arthas,watch一下getSqlMap方法,然后分别调用列表查询导出接口,得到如下两条记录

    HttpServletRequest参数丢失问题及解决

    对比可知,上面有的很多参数,下面一条都没有,那么参数怎么会消失呢?数据都是从HttpServletRequest对象中获取的,那么这个对象里面的数据怎么消失了呢?

    细心的网友可能注意到了

    我们导出方式是异步的,关键在@Async注解

    HttpServletRequest参数丢失问题及解决

    难道莫非,HttpServletRequest被回收了,果然编程网上搜一下,很多案例

    HttpServletRequest参数丢失问题及解决

    HttpServletRequest参数丢失问题及解决

    比较官方的说明

    不推荐在异步中使用request编程客栈,会得到不确定的结果

    HttpServletRequest参数丢失问题及解决

    因此,我们需要在异步方法前提取参数,再传入

    HttpServletRequest参数丢失问题及解决

    小小的问题,大大的疑惑。花了不少时间定位问题,好在爬出了坑。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号