张晓波
2023-09-19 164694c47c35d6654df69b533e8dbf8b5423efc5
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package com.thhy.general.utils;
 
import com.thhy.general.common.BasicStatus;
import com.thhy.general.config.BasicContext;
import com.thhy.general.config.SysUserInfo;
import com.thhy.general.exception.BasicException;
import com.thhy.general.config.GlobalConfig;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
 
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
 
/**
 * @Author: zhang_xiao_bo
 * @Date: 2022/3/24 10:53
 * @description: 用户信息相关
 */
public class UserInfoUtils {
 
    private UserInfoUtils(){
 
    }
 
    private static volatile UserInfoUtils instance = null;
 
    private static RedissonClient redissonClient = null;
 
    private static GlobalConfig globalConfig = null;
 
    public static UserInfoUtils getInstance(){
        if(instance == null){
            synchronized (UserInfoUtils.class){
                if(instance == null){
                    redissonClient = SpringContextUtils.getBean(RedissonClient.class);
                    globalConfig = SpringContextUtils.getBean(GlobalConfig.class);
                    instance = new UserInfoUtils();
                    return instance;
                }
            }
        }
        return instance;
    }
 
    public SysUserInfo getUserInfo(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String userToken = request.getHeader("usertoken");
        RBucket<SysUserInfo> rBucket = redissonClient.getBucket(globalConfig.getKeyPrefix()+":usertoken:"+ userToken);
        SysUserInfo sysUserInfo = rBucket.get();
        if(sysUserInfo==null){
            throw new BasicException(BasicStatus.TOKEN_IS_NULL);
        }
        if(sysUserInfo.getUserId()==null){
            throw new BasicException(BasicStatus.LOGIN_INFO_IS_ERROR);
        }
        return sysUserInfo;
    }
 
    /**
     * 这个参数只是为了区别上个方法
     * 佛系调用,有无皆可
     * @param flag
     * @return
     */
    public SysUserInfo getUserInfo(boolean flag){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String userToken = request.getHeader("usertoken");
        RBucket<SysUserInfo> rBucket = redissonClient.getBucket(globalConfig.getKeyPrefix()+":usertoken:"+ userToken);
        SysUserInfo sysUserInfo = rBucket.get();
        if(sysUserInfo==null){
            return null;
        }
        if(sysUserInfo.getUserId()==null){
            return null;
        }
        return sysUserInfo;
    }
 
    public SysUserInfo getUserInfo(String token){
        RBucket<SysUserInfo> rBucket = redissonClient.getBucket(globalConfig.getKeyPrefix()+":usertoken:"+ token);
        SysUserInfo sysUserInfo = rBucket.get();
        if(sysUserInfo==null){
            throw new BasicException(BasicStatus.TOKEN_IS_NULL);
        }
        if(sysUserInfo.getUserId()==null){
            throw new BasicException(BasicStatus.LOGIN_INFO_IS_ERROR);
        }
        return sysUserInfo;
    }
 
    public Map<String,Object> currentPath(){
        if(RequestContextHolder.getRequestAttributes()==null){
            Map<String,Object> map = new HashMap<>();
            map.put("ip","");
            map.put("path","");
            return map;
        }
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String path = request.getRequestURI().toString();
        String ip = request.getRemoteAddr();
        Map<String,Object> map = new HashMap<>();
        map.put("ip",ip);
        map.put("path",path);
        return map;
    }
}