ThreadLocal实现session中用户信息 的线程间共享(精)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadLocal实现session中用户信息 的线程间共享(精)相关的知识,希望对你有一定的参考价值。

ThreadLocal并不难理解,我总结的最简单的理解就是:

ThreadLocal像其它变量一样(局部、全局、静态)也是一种变量类型,只是他是线程变量,更直白的说他是一种变量作用域,即他的作用域是当前线程(比如用户的一个请求算一个线程),ThreadLocal用于在一个线程间共享。
ThreadLocal的set(String,Object)方法就是设置这个变量的名称、同时给这个变量赋值、当然同时也给予了这个变量的类型。
 @SuppressWarnings("unchecked")  
public class UserSession {  
      
    private static final ThreadLocal SESSION_MAP = new ThreadLocal();  
  
      
    protected UserSession() {  
    }  
  
      
    public static Object get(String attribute) {  
        Map map = (Map) SESSION_MAP.get(); 
        return map.get(attribute);  
    }  
  
      
    public static <T> T get(String attribute, Class<T> clazz) {  
        return (T) get(attribute);  
    }  
  
      
    public static void set(String attribute, Object value) {  
        Map map = (Map) SESSION_MAP.get();  
  
        if (map == null) {  
            map = new HashMap();  
            SESSION_MAP.set(map);  
        }  
  
        map.put(attribute, value);  
    }  
}  
接下来要做的就是在请求过滤器中:
UserSession.set("user",从session中取出用户信息)
 
然后我们就能在任意的一层service或者dao里:
UserSession.get("user") 获取当前线程的user信息了
 
好处:避免了跨层之间的参数传递,实现了层与层之间的松耦合。

以上是关于ThreadLocal实现session中用户信息 的线程间共享(精)的主要内容,如果未能解决你的问题,请参考以下文章

由会话信息保存认识ThreadLocal

ThreadLocal存储用户信息,实现项目是全局随处获取用户信息

java无状态登录实现方式之ThreadLocal+Cookie

hibernate中session线程安全的实现

HibernateSessionFactory建立-使用ThreadLocal

基于SessionRedis 短信登录功能实现,解决Session共享,登录状态刷新问题及Threadlocal线程隔离