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