在写代码insert和update的时候,往往需要存入当前操作者的id或者name,来记录这条数据是who更新的。
这时,ThreadLocal的作用就体现了。
我们可以在doFilter 验证权限时,如果有auth的时候,从redis中拿出session信息,set ThreadLocal中。
doFilter后,再remove ThreadLocal。
代码参考,细节省略:
public class Sample {
private static final ThreadLocal<Map> ThreadLocal_Map = new ThreadLocal<Map>();
public static void setMap(Map map) {
ThreadLocal_Map.set(map);
}
// remove
public static void closeMap() {
Map map = ThreadLocal_Map.get();
if (map != null) {
map.clear();
ThreadLocal_Map.remove();
}
}
public static String getUserName() {
Map map = ThreadLocal_Map.get();
return map.getOrDefault("userName", "system").toString();
}
}
用法: Sample.getUserName()