常用校验token加上二级缓存

This commit is contained in:
wangliwen 2022-07-05 09:21:03 +08:00
parent 0f25b9414e
commit c69efa101f
2 changed files with 70 additions and 56 deletions

View File

@ -57,4 +57,13 @@
overflowToDisk="false" overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"/> memoryStoreEvictionPolicy="LRU"/>
<!-- getByToken缓存 -->
<cache name="getByToken"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="60"
timeToLiveSeconds="600"
overflowToDisk="true"
memoryStoreEvictionPolicy="LRU"/>
</ehcache> </ehcache>

View File

@ -4,6 +4,8 @@ import io.renren.common.service.impl.BaseServiceImpl;
import io.renren.dao.TokenDao; import io.renren.dao.TokenDao;
import io.renren.entity.TokenEntity; import io.renren.entity.TokenEntity;
import io.renren.service.TokenService; import io.renren.service.TokenService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
@ -12,73 +14,76 @@ import java.util.UUID;
@Service @Service
public class TokenServiceImpl extends BaseServiceImpl<TokenDao, TokenEntity> implements TokenService { public class TokenServiceImpl extends BaseServiceImpl<TokenDao, TokenEntity> implements TokenService {
/** private static final String getByTokenKey = "getByToken";
* 12小时后过期 /**
*/ * 12小时后过期
private final static int EXPIRE = 3600 * 12; */
private final static int EXPIRE = 3600 * 12;
@Override @Override
public TokenEntity getByToken(String token) { @Cacheable(value = getByTokenKey, key = "#p1")
return baseDao.getByToken(token); public TokenEntity getByToken(String token) {
} return baseDao.getByToken(token);
}
@Override @Override
public TokenEntity createToken(Long userId) { @CacheEvict(key = getByTokenKey, allEntries = true)
//当前时间 public TokenEntity createToken(Long userId) {
Date now = new Date(); //当前时间
//过期时间 Date now = new Date();
Date expireTime = new Date(now.getTime() + EXPIRE * 1000); //过期时间
Date expireTime = new Date(now.getTime() + EXPIRE * 1000);
//用户token //用户token
String token; String token;
//判断是否生成过token //判断是否生成过token
TokenEntity tokenEntity = baseDao.getByUserId(userId); TokenEntity tokenEntity = baseDao.getByUserId(userId);
if(tokenEntity == null){ if (tokenEntity == null) {
//生成一个token //生成一个token
token = generateToken(); token = generateToken();
tokenEntity = new TokenEntity(); tokenEntity = new TokenEntity();
tokenEntity.setUserId(userId); tokenEntity.setUserId(userId);
tokenEntity.setToken(token); tokenEntity.setToken(token);
tokenEntity.setUpdateDate(now); tokenEntity.setUpdateDate(now);
tokenEntity.setExpireDate(expireTime); tokenEntity.setExpireDate(expireTime);
//保存token //保存token
this.insert(tokenEntity); this.insert(tokenEntity);
}else{ } else {
//判断token是否过期 //判断token是否过期
if(tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){ if (tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()) {
//token过期重新生成token //token过期重新生成token
token = generateToken(); token = generateToken();
}else { } else {
token = tokenEntity.getToken(); token = tokenEntity.getToken();
} }
tokenEntity.setToken(token); tokenEntity.setToken(token);
tokenEntity.setUpdateDate(now); tokenEntity.setUpdateDate(now);
tokenEntity.setExpireDate(expireTime); tokenEntity.setExpireDate(expireTime);
//更新token //更新token
this.updateById(tokenEntity); this.updateById(tokenEntity);
} }
return tokenEntity; return tokenEntity;
} }
@Override @Override
public void expireToken(Long userId){ public void expireToken(Long userId) {
Date now = new Date(); Date now = new Date();
TokenEntity tokenEntity = new TokenEntity(); TokenEntity tokenEntity = new TokenEntity();
tokenEntity.setUserId(userId); tokenEntity.setUserId(userId);
tokenEntity.setUpdateDate(now); tokenEntity.setUpdateDate(now);
tokenEntity.setExpireDate(now); tokenEntity.setExpireDate(now);
this.updateById(tokenEntity); this.updateById(tokenEntity);
} }
private String generateToken(){ private String generateToken() {
return UUID.randomUUID().toString().replace("-", ""); return UUID.randomUUID().toString().replace("-", "");
} }
} }