无法通过sesssion获取登录用户信息时怎么办

文章介绍了如何在Java后端通过ThreadLocal实现线程间的共享,特别是处理前端请求时,在同一线程中的多个类可以共享登录用户的ID。首先创建一个工具类存储ThreadLocal变量,然后在登录过滤器中从session获取用户ID并存储到ThreadLocal,之后的处理逻辑可以随时通过工具类获取该ID,即使没有session也可获取用户信息。
摘要由CSDN通过智能技术生成

思路

可知,同一个线程下的不同类可以共享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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值