package com.qs.serve.common.util; import com.qs.serve.common.framework.security.model.LoginUser; import com.qs.serve.common.framework.security.model.LoginUserType; import com.qs.serve.common.model.consts.GySysConst; import com.qs.serve.common.model.enums.HttpCode; import lombok.experimental.UtilityClass; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; import java.util.Objects; /** * @author YenHex * @since 2022/3/1 */ @UtilityClass public class AuthContextUtils { private final static ThreadLocal THREAD_TENANT = new ThreadLocal<>(); public static String getAppId(){ return getAppId(true); } public static String getAppId(boolean throwEx){ String appId = ServletUtils.getHeader(GySysConst.APP_ID_PROP); if(throwEx&&StringUtils.isEmpty(appId)){ Assert.throwEx(HttpCode.LOGIN_ERR_4002); } return appId; } /** * 获取用户登录信息 * @return */ public static LoginUser getLoginUser(){ return getLoginUser(true); } /** * 获取微信用户ID * @return */ public static String getAppUserId(){ LoginUser loginUser = getLoginUser(); if(loginUser.getTypeFlag().equals(LoginUserType.APP_USER)){ return loginUser.getUserId(); } return null; } /** * 系统用户ID * @return */ public static String getSysUserId(){ LoginUser loginUser = getLoginUser(); if(loginUser.getTypeFlag().equals(LoginUserType.SYS_SUP_USER) ||loginUser.getTypeFlag().equals(LoginUserType.SYS_USER)){ return loginUser.getUserId(); } return null; } /** * 判断是否超级管理员 * @return */ public static boolean isSupAdmin(){ return Objects.requireNonNull(getLoginUser(false)) .getTypeFlag().equals(LoginUserType.SYS_SUP_USER); } public static void setTenant(String value){THREAD_TENANT.set(value);} public static String getTenant(){return THREAD_TENANT.get();} public static void removeTenant(){THREAD_TENANT.remove();} public static LoginUser getLoginUser(boolean throwEx){ UserDetails details = getUserDetail(throwEx); if(details instanceof LoginUser){ return (LoginUser) details; } return null; } private static UserDetails getUserDetail(boolean throwEx){ SecurityContext ctx = SecurityContextHolder.getContext(); Authentication auth = ctx.getAuthentication(); if (auth != null) { Object authPri = auth.getPrincipal(); if (authPri instanceof UserDetails) { UserDetails details = (UserDetails) authPri; return details; } } if(throwEx){ throw new UsernameNotFoundException("未登录或被登出"); } return null; } }