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