zoukankan      html  css  js  c++  java
  • 每个接口都要获取token来拿用户信息? 拦截器+线程池 优化 token

    1,创建线程池:

    public class UserHolder {
    
        private static ThreadLocal<User> tl =new ThreadLocal<User>();
    
        // 存数据
        public static void saveUser(User user){
            tl.set(user);
        }
    
        //取数据
        public static User getUser(){
            return tl.get();
        }
    
        //删除数据
        public static void removeUser(){
            tl.remove();
        }
    
    }

    2,创建拦截器:

    @Component
    public class TokenInterceptor implements HandlerInterceptor {
        @Autowired
        private UserService userService;
    
        @Override//在controller前拦截
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // 获取token  getHeader获取单个请求头Authorization对应的value值
            String token = request.getHeader("Authorization");//请求参数Authorization 令牌=token
            if (token == null) {
                response.setStatus(400);
                return false;
    
            }
    
            User user = userService.fromRedisUser(token);
            if(user==null){
                response.setStatus(400); //权限不足
                return false;//中断请求
            }
            // 将用户放在threadLocal中
            UserHolder.saveUser(user);
            // 放行
            return true;
        }
    
    
        @Override//响应结束 threadLocal移除对象
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            UserHolder.removeUser(); //移除对象
        }
    }

    这样,需要根据token来获取用户信息的地方就可以直接:

    User user = UserHolder.getUser();

    再也不用每次都往接口里传token了

    未经允许 禁止转载
  • 相关阅读:
    S1 商品信息管理系统
    用例图
    mvc使用mongodb时objectId序列化与反序列化
    windows下检測文件改变
    【Android 开发实例】时间管理APP开发之数据库设计
    设计模式 之 原型
    ANT安装及配置
    Java环境变量设置
    Win7安装软件,界面上中文显示乱码的解决方案
    Some perl tips
  • 原文地址:https://www.cnblogs.com/axibug/p/15479414.html
Copyright © 2011-2022 走看看