常用校验token加上二级缓存
This commit is contained in:
parent
0f25b9414e
commit
c69efa101f
|
@ -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>
|
|
@ -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("-", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue