思路
可知,同一个线程下的不同类可以共享TreadLocal这个线程局部变量,同时,在前端向后端发送的一个请求中,如果后端使用了多个类进行工作,那么这多个类都是在同一个线程中的,因此他们可以共享TreadLocal,于是便可以将登录用户信息存入TreadLocal,当无法获取session时便可以通过TreadLocal获取
步骤
1.编写一个利用TreadLocal存取信息的工具类
public class BaseContext {
private static ThreadLocal<String> threadLocal = new ThreadLocal<>();
public static void setUserId(Long id){
threadLocal.set(id);
}
I
public static String getUserId(){
return threadLocal.get();
}
}
2.在登录过滤器中利用session获取用户登录信息
String id = request.getSession().getAttribute("user");
3.利用工具类存用户登录信息
BaseContext.setUserId(id);
4.之后只要是在同一线程中便可以通过以下代码共享userId了
BaseContext.getUserId();