异步线程RequestContextHolder为空问题

问题

RequestContextHolder.getRequestAttributes(); 值为空,也就是常说的session丢失

分析

由于session是线程安全的,无法直接在各个线程中传递,所以在服务间异步线程调用时,就会导致session丢失的问题

首先,为什么要分析这个RequestContextHolder?
我们一般获取request和response是在过滤器Filter、拦截器,或者controller层获取

但如果想在service层获取request和response呢?

正常来说在service层是没有request的,当我们需要在service层获取request和response时,我们可以在RequestContextHolder中获取。

解决方案

在异步线程调用之前设置session允许继承

//设置异步线程之间可以共享session数据
RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(), true);
posted @ 2022-06-22 15:44  至安  阅读(1858)  评论(0编辑  收藏  举报