Zwei elegante Möglichkeiten, die aktuell angemeldete Benutzer-ID zu erhalten

Inhaltsverzeichnis

Methode 1: Holen Sie sich das Token im Anforderungsheader über HttpServletRequest zur Konvertierung

Methode 2: Über die lokale Thread-Variable ThreadLocal


Methode 1: Holen Sie sich das Token im Anforderungsheader über HttpServletRequest zur Konvertierung

HttpServletRequest kann in @Autowired oder als Parameter im Controller eingefügt werden.

//从请求头中拿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());

Methode 2: Über die lokale Thread-Variable ThreadLocal

Schreiben Sie zunächst eine Toolklasse 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();
    }
}

Geben Sie gegebenenfalls den Wert ein. Zum Beispiel, nachdem die JWT-Token-Authentifizierung bestanden wurde.

BaseContext.setCurrentId(userId);

Bei Bedarf holen Sie sich den Wert aus der lokalen Variablen des Threads, und fertig.

Long userId = BaseContext.getCurrentId;

Persönlich finde ich diesen Weg eleganter.

Supongo que te gusta

Origin blog.csdn.net/tomorrow9813/article/details/131736382
Recomendado
Clasificación