1
13693261870
2022-09-16 762f2fb45db004618ba099aa3c0bd89dba1eb843
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package com.landtool.lanbase.modules.sys.service.impl;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import com.landtool.lanbase.common.shiro.TokenGenerator;
import com.landtool.lanbase.common.utils.Result;
import com.landtool.lanbase.modules.log.entity.LogAction;
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;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
 
@Service("sysUserTokenService")
public class SysUserTokenServiceImpl implements SysUserTokenService {
 
    @Autowired
    private SysUserTokenDao sysUserTokenDao;
 
    @Autowired
    private SysUserTokenRedis sysUserTokenRedis;
    
    //24小时后过期
    private final static int EXPIRE = 86400;
 
    @Override
    public SysUserToken queryByUserId(Long userId) {
        SysUserToken sysUserToken=sysUserTokenRedis.get(userId);
        if(sysUserToken==null){
            sysUserToken=sysUserTokenDao.queryByUserId(userId);
            sysUserTokenRedis.saveOrUpdate(sysUserToken);
        }
        return sysUserToken;
    }
 
    @Override
    public SysUserToken queryByToken(String token) {
        SysUserToken sysUserToken=sysUserTokenRedis.get(token);
        if(sysUserToken==null){
            sysUserToken=sysUserTokenDao.queryByToken(token);
            sysUserTokenRedis.saveOrUpdate(sysUserToken);
        }
        return sysUserToken;
    }
 
    @Override
    @Transactional
    public void save(SysUserToken token){
        sysUserTokenDao.save(token);
        sysUserTokenRedis.saveOrUpdate(token);
    }
 
    @Override
    @Transactional
    public void update(SysUserToken token){
        sysUserTokenRedis.delete(token);
        sysUserTokenDao.update(token);
    }
 
    @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);
    }
    
    @Override
    public void addUserToken(Long userId, String loginname, String token,String expireTime,String updateTime) {
//        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy",Locale.UK);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SysUserToken usertoken = new SysUserToken();
        usertoken.setUserId(userId);
        usertoken.setLoginname(loginname);
        usertoken.setToken(token);
        try {
            expireTime = sdf.format(new Date(Long.parseLong(expireTime)));  //时间戳,获取格式化后的时间字符串
            updateTime = sdf.format(new Date(Long.parseLong(updateTime)));
            usertoken.setExpireTime(sdf.parse(expireTime));  //转换为格式的时间
            usertoken.setUpdateTime(sdf.parse(updateTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        sysUserTokenDao.save(usertoken);
    }
    
    @Override
    public void updateUserToken(Long userId, String loginname, String token,String expireTime,String updateTime) {
//        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy",Locale.UK);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SysUserToken usertoken = new SysUserToken();
        usertoken.setUserId(userId);
        usertoken.setLoginname(loginname);
        usertoken.setToken(token);
        try {
            expireTime = sdf.format(new Date(Long.parseLong(expireTime)));
            updateTime = sdf.format(new Date(Long.parseLong(updateTime)));
            usertoken.setExpireTime(sdf.parse(expireTime));
            usertoken.setUpdateTime(sdf.parse(updateTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        sysUserTokenDao.update(usertoken);
    }
}