springboot3+vue3(四.2)JWT优化 -- ThreadLocal

解决痛点:

我们在拦截器内已经获取并解析了一遍token数据,如图:

然后在获取当前登录用户详细信息时又做了一遍同样的操作,如图:

后续如果说需要用到当前登录用户的信息时都要带上token参数,这样是很冗余的。这时就会用到 ThreadLocal 来进行优化处理。

 

ThreadLocal工具类

/**
 * ThreadLocal 工具类
 */
@SuppressWarnings("all")
public class ThreadLocalUtil {
    //提供ThreadLocal对象,
    private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();

    //根据键获取值
    public static <T> T get(){
        return (T) THREAD_LOCAL.get();
    }
    
    //存储键值对
    public static void set(Object value){
        THREAD_LOCAL.set(value);
    }


    //清除ThreadLocal 防止内存泄漏
    public static void remove(){
        THREAD_LOCAL.remove();
    }
}
ThreadLocal工具类

我们将工具类创建在 utils 包下

 

使用方法:

我们只需在拦截器内,把业务数据通过set方法存储到ThreadLocal中,使用时再通过get方法获取即可。

 

运行结果展示:

 

 

到此还未结束,当使用完后要即时清除 ThreadLocal 数据防止内存泄漏。

只需要在拦截器中的afterCompletion方法中清除ThreadLocal中的数据即可。

 

posted @ 2024-03-06 16:01  一介桃白白  阅读(158)  评论(0编辑  收藏  举报