/** * Copyright (c) 2018 人人开源 All rights reserved. * * https://www.renren.io * * 版权所有,侵权必究! */ package io.renren.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.renren.common.service.impl.BaseServiceImpl; import io.renren.dao.TokenDao; import io.renren.entity.TokenEntity; import io.renren.service.TokenService; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.UUID; @Service public class TokenServiceImpl extends BaseServiceImpl implements TokenService { /** * 12小时后过期 */ private final static int EXPIRE = 3600 * 12; @Override public TokenEntity getByToken(String token) { return baseDao.getByToken(token); } @Override public TokenEntity createToken(Long userId) { //当前时间 Date now = new Date(); //过期时间 Date expireTime = new Date(now.getTime() + EXPIRE * 1000); //用户token String token; //判断是否生成过token TokenEntity tokenEntity = baseDao.getByUserId(userId); if(tokenEntity == null){ //生成一个token token = generateToken(); tokenEntity = new TokenEntity(); tokenEntity.setUserId(userId); tokenEntity.setToken(token); tokenEntity.setUpdateDate(now); tokenEntity.setExpireDate(expireTime); //保存token this.insert(tokenEntity); }else{ //判断token是否过期 if(tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){ //token过期,重新生成token token = generateToken(); }else { token = tokenEntity.getToken(); } tokenEntity.setToken(token); tokenEntity.setUpdateDate(now); tokenEntity.setExpireDate(expireTime); //更新token this.updateById(tokenEntity); } return tokenEntity; } @Override public void expireTokenByUserId(Long userId){ Date now = new Date(); TokenEntity tokenEntity = new TokenEntity(); tokenEntity.setUserId(userId); tokenEntity.setUpdateDate(now); tokenEntity.setExpireDate(now); this.updateById(tokenEntity); } @Override public void expireToken(String token){ Date now = new Date(); List tokenEntities = baseDao.selectList(new QueryWrapper().eq("token",token)); if(!CollectionUtils.isEmpty(tokenEntities)){ for(TokenEntity tokenEntity:tokenEntities){ tokenEntity.setUpdateDate(now); tokenEntity.setExpireDate(now); baseDao.updateById(tokenEntity); } } } private String generateToken(){ return UUID.randomUUID().toString().replace("-", ""); } }