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);
|
}
|
}
|