需求:
[“userName”,"userId","appId"......]像这些基础信息,如果能随取随用那就太棒了。
怎么做:
在filter里,将这些信息存储在ThreadLocal里。在使用的地方直接获取。在filter结束的方法里,将ThreadLocal里的这些信息擦除。springboot中tomcat使用的是线程池,那么ThreadLocal在存储时的key Thread.currentThread和获取时使用的key Thread.currentThread有可能不一样。就会发生要么获取不到值,要么获取到错误的值。
如果非要使用ThreadLocal,解决的思路就是每次先塞值,再删值。这样做的好处显而易见,但坏处是每次都会塞一次值,例如不需要这些信息的请求也塞值了。
如果为了节省程序的消耗,那就需要的时候从request中单独获取,可以把这部分代码写成一个工具类,需要时直接调用。
备注:
这些的信息在token中有携带。