SecurityUtil.java 1.6 KB
package com.xly.erp.common.security;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * 安全上下文工具:取当前登录用户名 / 用户类型。
 *
 * <p>REQ-USR-001 T3。用户名为 {@link Authentication#getName()}(principal),
 * 用户类型存放在 authorities 中(以 {@code TYPE_} 前缀标识)。</p>
 */
public final class SecurityUtil {

    /** 用户类型 authority 前缀。 */
    public static final String TYPE_PREFIX = "TYPE_";

    private SecurityUtil() {
    }

    /**
     * 当前登录用户名(JWT 主体 sUserName);未认证返回 null。
     */
    public static String currentUserName() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if (auth == null || !auth.isAuthenticated()) {
            return null;
        }
        return auth.getName();
    }

    /**
     * 当前登录用户类型(sUserType,用于管理员判定);取不到返回 null。
     */
    public static String currentUserType() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        if (auth == null || !auth.isAuthenticated()) {
            return null;
        }
        for (GrantedAuthority authority : auth.getAuthorities()) {
            String role = authority.getAuthority();
            if (role != null && role.startsWith(TYPE_PREFIX)) {
                return role.substring(TYPE_PREFIX.length());
            }
        }
        return null;
    }
}