現在ログインしているユーザー ID を取得する 2 つのエレガントな方法

目次

方法 1: HttpServletRequest を通じてリクエスト ヘッダー内のトークンを取得して変換する

方法 2: スレッド ローカル変数 ThreadLocal を使用する


方法 1: HttpServletRequest を通じてリクエスト ヘッダー内のトークンを取得して変換する

HttpServletRequest は @Autowired に挿入することも、コントローラーのパラメーターとして挿入することもできます。

//从请求头中拿token
String token = request.getHeader("token");
//用JwtUtil工具 根据 盐 解析token,得到当时放进去的map
Map claims = JwtUtil.parseJWT("salt", token);
//取出map里的userId
Long userId= Long.valueOf(claims.get("userId").toString());

方法 2: スレッド ローカル変数 ThreadLocal を使用する

まずツール クラス BaseContext を作成します

public class BaseContext{

    //创建线程本地变量
    public static final ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    //set值
    public static void setCurrentId(Long id){
        threadLocal.set(id);
    }

    //取值
    public static Long getCurrentId{
        return threadLocal.getCurrentId();
    }

    //删除
    public static void removeCurrentId() {
        threadLocal.remove();
    }
}

必要に応じて、値を押し込みます。たとえば、jwt トークン認証が通過した後などです。

BaseContext.setCurrentId(userId);

必要に応じて、スレッドのローカル変数から値を取得するだけです。

Long userId = BaseContext.getCurrentId;

個人的にはこちらの方がエレガントな気がします。

おすすめ

転載: blog.csdn.net/tomorrow9813/article/details/131736382