token是根据id生成的,也可以根据token解析获取id.
获取token是在拦截器中,解析id也应该在拦截器中.但是现在就面临如何将id传给需要用到id的方法中的问题.
每一次请求都对应一个线程,如果能将需要共享的数据存储在当前线程中,就可以令其在不同层次之间传递.
ThreadLocal,是Thread的局部变量.ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。通过ThreadLocal的get和set方法,就能够达到想要的效果:在拦截器校验token时将id通过set方法存储;在需要id时通过get方法获取.使用时为了方便往往将其封装成工具类:
public class BaseContext{
public static ThreadLocal<long> threadLocal = new ThreadLocal<>();
public static void setCurrentId(Long id){threadLocal.set(id);}
public static Long getCurrentId(){return threadLocal.get();}
public static void removeCurrentId(){threadLocal.remove();}`
}