ThreadLocal存放当前用户

用户信息必须由后端获取,不能通过前端传入的id是不可信的,,可能会出现越权的问题,,,怎么通过后端获取当前登录用户,,,
就需要将User 和 当前线程绑定在一起,,因为Servlet中的每一个请求,线程都是不同的,,,
在拦截器中,,拦截token,,将token中的用户信息,存入ThreadLocal中,,在拦截器执行过后的方法中清除ThreadLocal,防止内存泄露

public class LocalUser {
    private static ThreadLocal<Map<String,Object>> threadLocal = new ThreadLocal<Map<String, Object>>();

    public static void set(User user,Integer scope){
        HashMap<String, Object> map = new HashMap<>();
        map.put("user",user);
        map.put("scope",scope);
        LocalUser.threadLocal.set(map);
    }
    public  static  User getUser(){
        Map<String, Object> map = LocalUser.threadLocal.get();
        return (User) map.get("user");
    }

    public static Integer getScope(){
        Map<String, Object> map = LocalUser.threadLocal.get();
        return (Integer) map.get("scope");
    }

    public static void clear(){
        LocalUser.threadLocal.remove();
    }
}

你可能感兴趣的:(java,spring,boot)