controller层可以拿到AuthUtil.getUser()的用户信息,service层获取不到

Blade 已结 3 1226
gtfhao
gtfhao 剑尊 2022-03-14 16:29

一、该问题的重现步骤是什么?

1. 前端发送get请求

2. controller层可以拿到AuthUtil.getUser()的用户信息

3.从controller到service层后,再用AuthUtil.getUser()获取用户信息时,结果为空;debug时查看原因,到了service层时request丢失了。


二、你期待的结果是什么?实际看到的又是什么?

image.png

processService.historyFlowList方法

image.png

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

联合版2.9.0

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

已用下面方法解决:

// 将RequestAttributes对象设置为子线程共享
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(sra, true);

3条回答
  •  bluerose
    bluerose (最佳回答者)
    2022-03-14 20:10

    亲。异步没有在request里。所以无法获取到,请使用userId或者user对象作为参数传递就行了

    0 讨论(2)
  • 2022-03-14 16:37

    @async异步导致的,但是异步的话,如何拿AuthUtil.getUser()呢?

    看看有没有线程共享的方法,因为他的request是从LocalThread里取的。

    现在是工作流那块,如果User对象作为参数传递的话,一路传下去方法能有几十个


    已用下面方法解决

    // 将RequestAttributes对象设置为子线程共享
    ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    RequestContextHolder.setRequestAttributes(sra, true);


    1 讨论(0)
  • 2023-03-31 15:52

    这里真是一个大坑啊我去,研究了大半天

    0 讨论(0)
提交回复