| package com.xcong.excoin.common; | 
|   | 
| import cn.hutool.core.util.StrUtil; | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.xcong.excoin.common.contants.AppContants; | 
| import com.xcong.excoin.common.exception.GlobalException; | 
| import com.xcong.excoin.modules.member.entity.MemberEntity; | 
| import com.xcong.excoin.utils.RedisUtils; | 
| import com.xcong.excoin.utils.SpringContextHolder; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.http.HttpRequest; | 
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | 
| import org.springframework.security.core.Authentication; | 
| import org.springframework.security.core.context.SecurityContextHolder; | 
|   | 
| import javax.servlet.http.HttpServletRequest; | 
| import java.util.ArrayList; | 
|   | 
| /** | 
|  * 登陆用户工具类 | 
|  * | 
|  * @author wzy | 
|  * @date 2020-05-14 | 
|  **/ | 
| @Slf4j | 
| public class LoginUserUtils { | 
|   | 
|     private static final String ANON = "anonymousUser"; | 
|   | 
|     public static MemberEntity getAppLoginUser() { | 
|         if (SecurityContextHolder.getContext().getAuthentication().getPrincipal().equals(ANON)) { | 
|             throw new GlobalException("无法获取登陆信息"); | 
|         } else { | 
|             return (MemberEntity) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); | 
|         } | 
|     } | 
|   | 
|     public static String getAppLoginUserToken() { | 
|         return (String) SecurityContextHolder.getContext().getAuthentication().getCredentials(); | 
|     } | 
|   | 
|     public static void resetAppLoginUser(MemberEntity memberEntity) { | 
|         String token = getAppLoginUserToken(); | 
|         RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); | 
|         String jsonStr = redisUtils.getString(AppContants.PC_LOGIN_PREFIX + token); | 
|         if (StrUtil.isNotBlank(jsonStr)) { | 
|             redisUtils.set(AppContants.PC_LOGIN_PREFIX + token, JSONObject.toJSONString(memberEntity)); | 
|         } else { | 
|             redisUtils.set(AppContants.APP_LOGIN_PREFIX + token, JSONObject.toJSONString(memberEntity)); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * mybatis 拦截器专用 | 
|      * | 
|      * @return MemberEntity | 
|      */ | 
|     public static MemberEntity getUser() { | 
|         if (SecurityContextHolder.getContext().getAuthentication() == null) { | 
|             return null; | 
|         } | 
|   | 
|         if (SecurityContextHolder.getContext().getAuthentication().getPrincipal().equals(ANON)) { | 
|             return null; | 
|         } else { | 
|             return (MemberEntity) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); | 
|         } | 
|     } | 
|   | 
|     public static boolean isBrowser(HttpServletRequest request) { | 
|         String userAgent = request.getHeader("user-agent"); | 
|         if (userAgent.toLowerCase().contains("mobile") || userAgent.contains("CFNetwork") || userAgent.toLowerCase().contains("okhttp")) { | 
|             return false; | 
|         } | 
|         return true; | 
|     } | 
| } |