package com.aps.common.core.context; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import com.alibaba.ttl.TransmittableThreadLocal; import com.aps.common.core.constant.SecurityConstants; import com.aps.common.core.text.Convert; import com.aps.common.core.utils.StringUtils; /** * 获取当前线程变量中的 用户id、用户名称、Token等信息 * 注意: 必须在网关通过请求头的方法传入,同时在HeaderInterceptor拦截器设置值。 否则这里无法获取 * * @author ruoyi */ public class SecurityContextHolder { private static final TransmittableThreadLocal> THREAD_LOCAL = new TransmittableThreadLocal<>(); public static void set(String key, Object value) { Map map = getLocalMap(); map.put(key, value == null ? StringUtils.EMPTY : value); } public static String get(String key) { Map map = getLocalMap(); return Convert.toStr(map.getOrDefault(key, StringUtils.EMPTY)); } public static T get(String key, Class clazz) { Map map = getLocalMap(); return StringUtils.cast(map.getOrDefault(key, null)); } public static Map getLocalMap() { Map map = THREAD_LOCAL.get(); if (map == null) { map = new ConcurrentHashMap(); THREAD_LOCAL.set(map); } return map; } public static void setLocalMap(Map threadLocalMap) { THREAD_LOCAL.set(threadLocalMap); } public static Long getUserId() { return Convert.toLong(get(SecurityConstants.DETAILS_USER_ID), 0L); } public static void setUserId(String account) { set(SecurityConstants.DETAILS_USER_ID, account); } public static String getUserName() { return get(SecurityConstants.DETAILS_USERNAME); } public static void setUserName(String username) { set(SecurityConstants.DETAILS_USERNAME, username); } public static String getUserKey() { return get(SecurityConstants.USER_KEY); } public static void setUserKey(String userKey) { set(SecurityConstants.USER_KEY, userKey); } public static String getPermission() { return get(SecurityConstants.ROLE_PERMISSION); } public static void setPermission(String permissions) { set(SecurityConstants.ROLE_PERMISSION, permissions); } public static void remove() { THREAD_LOCAL.remove(); } }