原因:  因为用户信息存储在threadLocal中 ,所以在子线程中无法获取

SecurityContextHolder   中有三种存储策略  

  

 public static final String MODE_THREADLOCAL = "MODE_THREADLOCAL";
 public static final String MODE_INHERITABLETHREADLOCAL = "MODE_INHERITABLETHREADLOCAL";
 public static final String MODE_GLOBAL = "MODE_GLOBAL";

  第一中就是  默认的放在  threadLocal  中  ,所以在子线程中无法取到用户信息 

  第二种 : MODE_INHERITABLETHREADLOCAL 这种 策略就是存储在  InheritableThreadLocal 中  ,InheritableThreadLocal  可以在子线中获取用户信息

设置存储策略  :

  在java  启动参数中 设置 :   -Dspring.security.strategy=MODE_INHERITABLETHREADLOCAL

  参考  : https://my.oschina.net/lenve/blog/4408332

posted on 2023-02-02 11:17  JonRain0625  阅读(611)  评论(0编辑  收藏  举报