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