首页 > 其他分享 >利用ThreadLocal优化获取用户基本信息

利用ThreadLocal优化获取用户基本信息

时间:2024-02-06 19:56:54浏览次数:32  
标签:String get ThreadLocalUtil 获取 ThreadLocal import 优化 public

//测试类
package com.di.bigevent;

import org.junit.jupiter.api.Test;

public class ThreadLocalTest {

    @Test
    public void testThreadLocalSetAndGet(){

        ThreadLocal tl = new ThreadLocal();

        new Thread(()->{
            tl.set("李星云");
            System.out.println(Thread.currentThread().getName()+": "+ tl.get());
        },"蓝色").start();

        new Thread(()->{
            tl.set("袁天罡");
            System.out.println(Thread.currentThread().getName()+": "+ tl.get());
        },"绿色").start();
    }
}
//拦截器类
package com.di.bigevent.interceptors;

import com.di.bigevent.utils.JwtUtil;
import com.di.bigevent.utils.ThreadLocalUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import java.util.Map;

@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //令牌验证
        String token = request.getHeader("Authorization");

        try{
            Map<String,Object> claims = JwtUtil.parseToken(token);

            //把业务数据存放到ThreadLocal中
            ThreadLocalUtil.set(claims);
            //放行
            return true;
        }
        catch(Exception e){
            response.setStatus(401);
            //不放行
            return false;
        }
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //清空ThreadLocal中的数据
        ThreadLocalUtil.remove();
    }
}
//Controller
@GetMapping("userInfo")
    public Result<Object> userInfo(/*@RequestHeader(name = "Authorization") String token*/){
        /*Map<String, Object> map = JwtUtil.parseToken(token);
        String username = (String)map.get("username");*/


        Map<String,Object> map = ThreadLocalUtil.get();
        String username = (String) map.get("username");
        User user = userService.findByUserName(username);

        return Result.success(user);
    }
//util
package com.di.bigevent.utils;

/**
 * ThreadLocal 工具类
 */
@SuppressWarnings("all")
public class ThreadLocalUtil {
    //提供ThreadLocal对象,
    private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();

    //根据键获取值
    public static <T> T get(){
        return (T) THREAD_LOCAL.get();
    }
    
    //存储键值对
    public static void set(Object value){
        THREAD_LOCAL.set(value);
    }


    //清除ThreadLocal 防止内存泄漏
    public static void remove(){
        THREAD_LOCAL.remove();
    }
}

 

标签:String,get,ThreadLocalUtil,获取,ThreadLocal,import,优化,public
From: https://www.cnblogs.com/muzhaodi/p/18010235

相关文章

  • 建站之关于CP网站SSC搭建BC平台建站建议和运营优化分享
    关于搭建BC平台建站建议和运营优化分享,我可以在一定程度上提供一些信息和经验。一、关于搭建BC平台建站建议:确定网站目标和受众群体:在开始构建网站之前,需要明确网站的定位和目标受众群体。这将有助于确保网站内容符合受众需求,提高转化率。选择合适的开发语言和技术框架:根据网站......
  • 【幻兽帕鲁教程】服务器内存优化
    大量幻兽帕鲁玩家反馈,开服后在进行一段时间的游戏后会出现内存溢出导致异常退出游戏的情况,这里为大家提供一些缓解内存不足的方案作参考: 一:为Windows服务器配置虚拟内存本小节以WindowsServer2022为例,其他版本的Windows操作系统类似,可据此做参考。1、打开服务器的控......
  • 单调队列优化DP
    单调队列在DP中的基本应用,是对这样一类DP状态转移方程进行优化:\(dp[i]=\min\{dp[j]+a[i]+b[j]\},L(i)\lej\leR(i)\)。方程中的\(\min\)也可以是\(\max\),方程的特点是其中关于\(i\)的项\(a[i]\)和关于\(j\)的项\(b[j]\)是独立的,而\(j\)被限制在窗口......
  • mongodb大数据量分页查询优化
    业务背景mongodb大数据量分页查询主要耗时是查询总条数,所以有两种优化方式1.不查询总条数,查询最近N页数据[改动略多,执行耗时很短]2.增加页面时间范围必填条件[改动很小,执行耗时略长,与数据量有关][比如默认查询创建时间最近一个月的数据根据数据量做调整,创建时间有组合索引]这两种......
  • 单调队列及单调队列优化DP
    首先是单调队列: 其实单调队列就是一种队列内的元素有单调性(单调递增或者单调递减)的队列,答案(也就是最优解)就存在队首,而队尾则是最后进队的元素。因为其单调性所以经常会被用来维护区间最值或者降低$DP$的维数已达到降维来减少空间及时间的目的。类似于滑动窗口等,单调队列具有......
  • 【Unity】记一次卡顿优化(由3D资源面数过多引起)
    这个优化方法可能仅对我有效,我只是做一个记录条件:模型很大,并且shader中使用了Smoothness优化方法打开Mesh引用的模型修改模型Normal为calculate修改SmoothnessSource为fromAngle修改SmoothingAngle降到你可以接收的值,我设置的是20。在unity文档中说的是,通常SmoothingAn......
  • 虚拟飞控计算机:飞行控制系统验证与优化的利器
    ​01.背景介绍随着航空技术的飞速发展,飞行控制系统作为飞机的心脏,全面负责监测、调整和维持飞行器的姿态、航向、高度等参数,用以确保飞行的安全和稳定。为了满足这些要求,现代飞控系统通常采用先进的处理器和外设来确保其高效、稳定的运行。▲C919模拟驾驶舱 然而,在实际应......
  • java 关于有序获取多线程的返回结果问题,按提交任务的顺序,收集执行结果
    问题:以前做的多线程,执行的返回结果都是无序的,所以每次执行完毕后还要对结果集重新进行排序,增加了耗时; 今天突然想到一个思路,在给线程池提交任务的时候,可以提前获取任务总数,创建一个用于接收结果集的固定大小list2,然后子线程执行的时候把当前任务序号传进去,处理好数据后根据序号......
  • redmine获取cookie和其他系统实现单点登录
    前言最近有个需求,需要将我们一个平台对接到redmine,让用户可以通过这个平台直接在redmine提工单,需要实现免登录跳转。首先是想到去查redmine有无相应的单点登录功能,查到redmine是有LDAP认证功能的,解决方案LDAP认证Redmine支持通过LDAP(轻量级目录访问协议)实现用户认证,这使......
  • 凸优化 | 期末复习笔记存档
    这是自动化系的凸优化期末复习笔记,应该覆盖所有考点了。据可靠情报,至少2023秋季学期,两位老师的考题是一样的。想起来,考试时考察凸集,有问到一个腐蚀球的问题;大概先定义了腐蚀(若r=1的球被凸集包含,则球心在腐蚀后的凸集里)。去证明凸集腐蚀后还是凸的(或者类似的证明)。证明思路:......