|  |  |  | 
|---|
|  |  |  | 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() { | 
|---|
|  |  |  | return (MemberEntity) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|