2
13693261870
2022-09-16 653761a31dfeb50dd3d007e892d69c90bf0cdafc
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.landtool.lanbase.modules.sys.service.impl;
 
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.landtool.lanbase.common.shiro.TokenGenerator;
import com.landtool.lanbase.common.utils.HttpOperateUtils;
import com.landtool.lanbase.config.SysTemPropertyConfig;
import com.landtool.lanbase.modules.sys.dao.SysUserTokenDao;
import com.landtool.lanbase.modules.sys.entity.SysUserToken;
import com.landtool.lanbase.modules.sys.redis.SysUserTokenRedis;
import com.landtool.lanbase.modules.sys.service.SysUserTokenService;
 
 
 
@Service("sysUserTokenService")
public class SysUserTokenServiceImpl implements SysUserTokenService {
 
    @Autowired
    private SysUserTokenRedis sysUserTokenRedis;
 
    @Autowired
    private SysUserTokenDao sysUserTokenDao;
 
    @Autowired
    private SysTemPropertyConfig tokenConfig;
 
    // 24小时后过期
    private final static int EXPIRE = 86400;
 
    //@Override
    public SysUserToken queryByUserId(Long userId) {
        SysUserToken sysUserToken = null;
        try {
            String url = tokenConfig.getApiServer() + "/api/sys/usertoken/getInfoByUserId/" + userId;
            sysUserToken = (SysUserToken) HttpOperateUtils.getJsonObject(url, SysUserToken.class);
            if (sysUserToken != null && sysUserToken.getToken() != null)
                sysUserTokenRedis.saveOrUpdate(sysUserToken);
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return sysUserToken;
    }
 
    @Override
    public SysUserToken queryByToken(String token) {
        SysUserToken sysUserToken = sysUserTokenRedis.get(token);
        if (sysUserToken == null) {
            try {
                String url = tokenConfig.getApiServer() + "/api/sys/usertoken/getInfoByToken/" + token;
                sysUserToken = (SysUserToken) HttpOperateUtils.getJsonObject(url, SysUserToken.class);
                if (sysUserToken != null && sysUserToken.getToken() != null)
                    sysUserTokenRedis.saveOrUpdate(sysUserToken);
 
            } catch (IOException e) {
                e.printStackTrace();
            }
            sysUserTokenRedis.saveOrUpdate(sysUserToken);
        }
        return sysUserToken;
    }
 
    //@Override
    public void save(SysUserToken token) {
        String url = tokenConfig.getApiServer() + "/api/sys/usertoken/addUserToken";
        try {
            HttpOperateUtils.httpPost(url, token);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sysUserTokenRedis.saveOrUpdate(token);
    }
 
    //@Override
    public void update(SysUserToken token) {
        sysUserTokenRedis.delete(token);
        String url = tokenConfig.getApiServer() + "/api/sys/usertoken/updateUserToken";
        try {
            HttpOperateUtils.httpPost(url, token);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    @Override
    public Map<String, Object> createToken(long userId) {
        // 生成一个token
        String token = TokenGenerator.generateValue();
 
        // 当前时间
        Date now = new Date();
        // 过期时间
        Date expireTime = new Date(now.getTime() + EXPIRE * 1000);
 
        // 判断是否生成过token
        SysUserToken tokenEntity = queryByUserId(userId);
        if (tokenEntity == null) {
            tokenEntity = new SysUserToken();
            tokenEntity.setUserId(userId);
            tokenEntity.setToken(token);
            tokenEntity.setUpdateTime(now);
            tokenEntity.setExpireTime(expireTime);
 
            // 保存token
            save(tokenEntity);
        } else {
            tokenEntity.setToken(token);
            tokenEntity.setUpdateTime(now);
            tokenEntity.setExpireTime(expireTime);
 
            // 更新token
            update(tokenEntity);
        }
 
        Map<String, Object> result = new HashMap<>();
        result.put("token", token);
        result.put("expire", EXPIRE);
        return result;
    }
 
    @Override
    public void logout(long userId) {
        // 生成一个token
        String token = TokenGenerator.generateValue();
 
        // 修改token
        SysUserToken tokenEntity = new SysUserToken();
        tokenEntity.setUserId(userId);
        tokenEntity.setToken(token);
        update(tokenEntity);
    }
 
}