目次
方法 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;
個人的にはこちらの方がエレガントな気がします。