package com.gkhy.fourierSpecialGasMonitor.application.account.service.impl;
|
|
import com.gkhy.fourierSpecialGasMonitor.application.account.dto.respDto.TokenInfoDto;
|
import com.gkhy.fourierSpecialGasMonitor.application.account.service.TokenAppService;
|
import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result;
|
import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode;
|
import com.gkhy.fourierSpecialGasMonitor.commons.enums.SystemCacheKeyEnum;
|
import com.google.common.collect.Range;
|
import com.google.common.hash.Hashing;
|
import org.redisson.api.RMapCache;
|
import org.redisson.api.RedissonClient;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.nio.charset.StandardCharsets;
|
import java.util.concurrent.TimeUnit;
|
|
@Service
|
public class TokenAppServiceImpl implements TokenAppService {
|
|
@Autowired
|
private RedissonClient redissonClient;
|
|
@Override
|
public Result<TokenInfoDto> setToken(Long uid) {
|
Result result = new Result<>();
|
if(uid == null){
|
result.setCode(ResultCode.PARAM_ERROR_NULL.getCode());
|
result.setMsg("参数缺失");
|
return result;
|
}
|
String loginUserId = ""+uid;
|
//生成Token
|
String seed = loginUserId+ Range.atLeast(1) +System.nanoTime();
|
String hash = String.valueOf(Hashing.hmacMd5(loginUserId.getBytes(StandardCharsets.UTF_8)).hashString(seed,
|
StandardCharsets.UTF_8));
|
//存入redis
|
String accessTokenKey = SystemCacheKeyEnum.KEY_USER_TOKEN.getKey();
|
try {
|
RMapCache<String,Object> tokenCacheMap = redissonClient.getMapCache(accessTokenKey);
|
tokenCacheMap.remove(loginUserId);
|
tokenCacheMap.put(loginUserId,hash,120, TimeUnit.MINUTES);
|
result.setSuccess();
|
TokenInfoDto tokenInfoDto = new TokenInfoDto();
|
tokenInfoDto.setTk(hash);
|
tokenInfoDto.setUid(uid);
|
tokenInfoDto.setRemainSecond(tokenCacheMap.remainTimeToLive(loginUserId));
|
result.setData(tokenInfoDto);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
@Override
|
public Result resetTokenTime(Long uid) {
|
Result result = new Result<>();
|
if(uid == null){
|
result.setCode(ResultCode.PARAM_ERROR_NULL.getCode());
|
result.setMsg("参数缺失");
|
return result;
|
}
|
String loginUserId = ""+uid;
|
String accessTokenKey = SystemCacheKeyEnum.KEY_USER_TOKEN.getKey();
|
try {
|
RMapCache<String,Object> tokenCacheMap = redissonClient.getMapCache(accessTokenKey);
|
String tk = (String) tokenCacheMap.get(loginUserId);
|
tokenCacheMap.put(loginUserId,tk,120, TimeUnit.MINUTES);
|
result.setSuccess();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
@Override
|
public Result removeToken(Long uid) {
|
Result result = new Result<>();
|
if(uid == null){
|
result.setCode(ResultCode.PARAM_ERROR_NULL.getCode());
|
result.setMsg("参数缺失");
|
return result;
|
}
|
String loginUserId = ""+uid;
|
String accessTokenKey = SystemCacheKeyEnum.KEY_USER_TOKEN.getKey();
|
RMapCache<String,Object> tokenCacheMap = redissonClient.getMapCache(accessTokenKey);
|
tokenCacheMap.remove(loginUserId);
|
result.setSuccess();
|
return result;
|
}
|
|
@Override
|
public Result<TokenInfoDto> getToken(Long uid) {
|
Result<TokenInfoDto> result = new Result<>();
|
result.setCode(ResultCode.BUSINESS_ERROR_PERMISSION_DENIALED.getCode());
|
result.setMsg("TOKEN不存在");
|
if(uid == null){
|
result.setCode(ResultCode.PARAM_ERROR_NULL.getCode());
|
result.setMsg("参数缺失");
|
return result;
|
}
|
String loginUserId = ""+uid;
|
String accessTokenKey = SystemCacheKeyEnum.KEY_USER_TOKEN.getKey();
|
RMapCache<String,Object> tokenCacheMap = redissonClient.getMapCache(accessTokenKey);
|
Object tokenObject = tokenCacheMap.get(loginUserId);
|
String cacheToken;
|
if(tokenObject != null){
|
cacheToken = (String) tokenObject;
|
Long tokenRemainTimeToLive = tokenCacheMap.remainTimeToLive(loginUserId);
|
if(cacheToken != null && !cacheToken.isEmpty()){
|
result.setSuccess();
|
TokenInfoDto tokenInfoDto = new TokenInfoDto();
|
tokenInfoDto.setUid(uid);
|
tokenInfoDto.setTk(cacheToken);
|
tokenInfoDto.setRemainSecond(tokenRemainTimeToLive/1000);
|
result.setData(tokenInfoDto);
|
}
|
}
|
return result;
|
}
|
}
|