【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
功能:用户登录成功后,通过
SecurityUtils.getSubject().getSession().setAttribute("user",userTo);
设置shiro的session,开启一个线程加载列表,在列表中获取session
SecurityUtils.getSubject().getSession().getAttribute("user");
获取到的就是一个新的session,不是之前的session
静态方法获取session是通过ThreadLocal实现的,所以,你需要改一种实现思路。
比如,在往线程池提交任务之前,就先获取当前的session,然后将其set为Task类的一个属性,然后当Task被线程池执行的时候,直接通过get方法得到对应的session,然后setAttribute就没有问题啦。
都是基于线程上下文的用户Session,需要用Shiro的API来启动新的线程,这样才能传递Session绑定。
http://shiro.apache.org/static/1.2.3/apidocs/
@蓝水晶飞机 那为什么我使用java的线程池就没有问题,用spring的线程池就有问题
java线程池,在代码里面直接使用:
spring线程池,在xml文件中的配置,通过@Autowired使用: