KyleWang
发布于 2024-03-07 / 42 阅读
0
0

SpringBoot(五)Threadlocal 提供线程局部变量 线程安全

SpringBoot(五)

Threadlocal 提供线程局部变量 线程安全

用来存取数据 set()/get()

使用ThreadLocal 存储数据是线程安全的

用完记得调用remove方法释放

示例:

@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);
            //存储
            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 {
        ThreadLocalUtil.remove();
    }
}
@GetMapping("/userInfo")
public Result<User> 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);
}


评论