ThreadLocal工具类

本文介绍了Java中的ThreadLocal工具类在Spring框架中的使用,特别是在LoginInterceptor拦截器中存储JWTtoken,以及如何在WebConfig中配置和在业务类(如Controller)中获取ThreadLocal中的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ThreadLocal工具类

ThreadLocalUtil.java

public class ThreadLocalUtil {

	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);
	}

	public static void remove() {
		THREAD_LOCAL.remove();
	}
}

ThreadLocal应用

配合拦截器使用
LoginInterceptor.java

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import com.itheima.utils.JwtUtil;
import com.itheima.utils.ThreadLocalUtil;

@Component
public class LoginInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		String token = request.getHeader("Authorization");
		ThreadLocalUtil.set(token);
		try {
			Map<String, Object> claims = JwtUtil.parseToken(token);
			return true;
		} catch (Exception e) {
			response.setStatus(401);
			return false;
		}
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		ThreadLocalUtil.remove();
	}
}

拦截器注意注册
WebConfig.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.itheima.interceptors.LoginInterceptor;

@Configuration
public class WebConfig implements WebMvcConfigurer {

	@Autowired
	LoginInterceptor loginInterceptor;

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(loginInterceptor).excludePathPatterns("/user/login", "/user/register");
	}
}

业务类内调用(比如controller层)

......
	@GetMapping("/userInfo")
	public Result<User> userInfo() {
		Map<String, Object> map = ThreadLocalUtil.get();
		String username = (String) map.get("username");
		User user = userService.findByUsername(username);
		return Result.suc(user);
	}
......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老李笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值