package project.user.token.internal;
|
|
import java.io.Serializable;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import kernel.util.StringUtils;
|
import kernel.util.UUIDGenerator;
|
import kernel.web.ApplicationUtil;
|
import project.redis.RedisHandler;
|
import project.user.UserRedisKeys;
|
import project.user.token.Token;
|
import project.user.token.TokenService;
|
|
public class TokenServiceImpl implements TokenService {
|
|
private RedisHandler redisHandler;
|
|
private static final Logger logger=LoggerFactory.getLogger(TokenServiceImpl.class);
|
|
public String savePut(String partyId,String username) {
|
Token token = this.find(partyId);
|
if (token == null) {
|
token = new Token();
|
token.setPartyId(partyId);
|
}
|
|
String uuid = UUIDGenerator.getUUID();
|
token.setToken(uuid);
|
|
Serializable id=token.getId();
|
if(null == id) id=ApplicationUtil.getCurrentTimeUUID();
|
|
ApplicationUtil.executeInsertOrUpdate(token, "WHERE UUID=?", new Object[] {id});
|
redisHandler.setSync(UserRedisKeys.TOKEN + uuid, partyId);
|
redisHandler.setSync(UserRedisKeys.USER_NAME + uuid, username);
|
redisHandler.setSync(UserRedisKeys.TOKEN_PARTY_ID + partyId, token);
|
|
return uuid;
|
}
|
|
public String cacheGet(String token) {
|
if (StringUtils.isNullOrEmpty(token)) {
|
logger.error("cacheGet:token is null");
|
return null;
|
}
|
|
String partyId = (String) redisHandler.get(UserRedisKeys.TOKEN + token);
|
if (StringUtils.isNullOrEmpty(partyId)) {
|
HttpServletRequest request=ApplicationUtil.getHttpServletRequest();
|
if(null==request) {
|
logger.error("cacheGet:partyId is null,token:{}",token);
|
}else {
|
String servletPath = request.getServletPath();
|
logger.error("cacheGet:partyId is null,token:{},requestURI:{}",token,servletPath);
|
}
|
|
return null;
|
}
|
|
Token token_redis = (Token) redisHandler.get(UserRedisKeys.TOKEN_PARTY_ID + partyId);
|
if (null == token_redis) {
|
logger.error("cacheGet:token_redis is null");
|
return null;
|
}
|
|
if (!token.equals(token_redis.getToken())) {
|
logger.error("cacheGet:请求token:{}和token_redis{}不同", token, token_redis.getToken());
|
return null;
|
}
|
|
return partyId;
|
}
|
|
public String getUserName(String token,String url) {
|
if (StringUtils.isNullOrEmpty(token)) {
|
logger.error("getUserName:token is null,url:"+url);
|
return null;
|
}
|
|
String userName = (String) redisHandler.get(UserRedisKeys.USER_NAME + token);
|
if (StringUtils.isNullOrEmpty(userName)) return null;
|
|
return userName;
|
}
|
|
public Token find(String partyId) {
|
return (Token) redisHandler.get(UserRedisKeys.TOKEN_PARTY_ID + partyId);
|
}
|
|
@Override
|
public void delete(String token) {
|
if (StringUtils.isNullOrEmpty(token)) return;
|
|
String partyId = cacheGet(token);
|
if (!StringUtils.isNullOrEmpty(partyId)) {
|
Token entity = find(partyId);
|
if (entity != null) ApplicationUtil.executeDelete(Token.class,"WHERE UUID=?",new Object[] {entity.getId()});
|
}
|
|
redisHandler.remove(UserRedisKeys.TOKEN + token);
|
redisHandler.remove(UserRedisKeys.TOKEN_PARTY_ID + partyId);
|
}
|
|
public void setRedisHandler(RedisHandler redisHandler) {
|
this.redisHandler = redisHandler;
|
}
|
}
|