SecurityUtil.java
1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;
}
}