LoginContext.java 791 Bytes
package com.xly.erp.common.security;

/**
 * 请求级登录上下文 — JwtHandlerInterceptor 在 preHandle 时 set,afterCompletion 时 clear。
 * 用普通 ThreadLocal(不用 InheritableThreadLocal)避免子线程意外继承。
 */
public final class LoginContext {

    private static final ThreadLocal<LoginUser> HOLDER = new ThreadLocal<>();

    private LoginContext() {}

    public static void set(LoginUser user) {
        HOLDER.set(user);
    }

    public static LoginUser current() {
        return HOLDER.get();
    }

    public static void clear() {
        HOLDER.remove();
    }

    /** 当前登录用户上下文。userType 取值 NORMAL / SUPER_ADMIN。 */
    public record LoginUser(Integer userId, String username, String userType, String companyCode) {}
}