Filter和ThreadLocal结合存储用户id信息
ThreadLocal并不是一个Thread,而是Thread的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。 ThreadLocal在使用过程中,若使用完之后,建议在finally中调用remove()方法,手动释放对key和value的引用,避免产生内存泄漏问题。 在过滤器Filter的filterChain.doFilter(request, response)执行之前进行用户id信息的设置,在filterChain.doFilter(request, response)执行之后进行ThreadLocal的remove方法的操作。
建立ThreadLocal的操作userId的用户信息类
package com.app.studypro.utils;
/**
* 获取用户信息的工具类
* 采用ThreadLocal存储用户的id信息
* @author Administrator
*/
public class UserUtil {
/**
* ThreadLocal存储用户id信息
*/
private static ThreadLocal<Long> threadLocal=new ThreadLocal<>();
/**
* 获取当前用户的id
* @return 返回long类型的用户id
*/
public static Long getCurrentUserId(){
return threadLocal.get();
}
/**
* 设置用户id的信息
* @param userId 用户id
*/
public static void setCurrentUserId(Long userId){
threadLocal.set(userId);
}
/**
* 移除ThreadLocal中的当前线程存储的内容信息。请在使用完之后将其移除,避免存在内存泄漏
*/
public static void removeCurrentUserId(){
threadLocal.remove();
}
}
在Filter中将session中用户的登录信息存入或者移除ThreadLocal中的信息
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224635.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!