wg-basic/basic-app/src/main/java/ink/wgink/app/AppTokenManager.java

130 lines
3.9 KiB
Java
Raw Normal View History

2021-01-25 12:31:40 +08:00
package ink.wgink.app;
import com.alibaba.fastjson.JSONObject;
2021-01-28 12:13:15 +08:00
import ink.wgink.exceptions.TokenException;
import ink.wgink.interfaces.consts.ISystemConstant;
2021-03-01 18:00:25 +08:00
import ink.wgink.interfaces.manager.IAppManager;
2021-11-30 14:36:49 +08:00
import ink.wgink.interfaces.manager.IAppTokenService;
import ink.wgink.pojo.app.AppToken;
import ink.wgink.pojo.app.AppTokenUser;
2021-01-28 12:13:15 +08:00
import ink.wgink.util.AesUtil;
2021-01-25 12:31:40 +08:00
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
2021-02-05 16:52:19 +08:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2021-01-28 12:13:15 +08:00
2021-01-25 12:31:40 +08:00
import java.util.Date;
import java.util.List;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: AppTokenManager
* @Description: AppToken管理
* @Author: WangGeng
* @Date: 2019-08-02 11:08
* @Version: 1.0
**/
2021-03-01 18:00:25 +08:00
public class AppTokenManager implements IAppManager {
2021-02-05 16:52:19 +08:00
private static final Logger LOG = LoggerFactory.getLogger(AppTokenManager.class);
2021-01-25 12:31:40 +08:00
private static AppTokenManager appTokenManager = AppTokenManagerBuilder.appTokenManager;
2021-11-30 14:36:49 +08:00
private IAppTokenService appTokenService;
2021-01-25 12:31:40 +08:00
private AppTokenManager() {
}
public static AppTokenManager getInstance() {
return appTokenManager;
}
/**
* 获取token
*
* @param token
* @return
*/
2021-03-01 18:00:25 +08:00
@Override
2021-01-25 12:31:40 +08:00
public AppToken getToken(String token) {
2021-11-30 14:36:49 +08:00
return appTokenService.getToken(token);
2021-01-25 12:31:40 +08:00
}
/**
* 添加token
*
* @param token
2021-01-28 12:13:15 +08:00
* @param appTokenTypeEnum
2021-01-25 12:31:40 +08:00
* @param appTokenUser
*/
2021-03-01 18:00:25 +08:00
public synchronized void addToken(String token, AppToken.AppTokenTypeEnum appTokenTypeEnum, AppTokenUser appTokenUser) {
2021-11-30 14:36:49 +08:00
appTokenService.addToken(token, appTokenTypeEnum, appTokenUser);
2021-01-25 12:31:40 +08:00
}
2021-03-01 18:00:25 +08:00
@Override
2021-01-25 12:31:40 +08:00
public AppTokenUser parseToAppTokenUser(String token) throws TokenException {
String userInfo = null;
try {
userInfo = AesUtil.aesCommonDecoder(ISystemConstant.APP_TOKEN_AES_KEY, new String(Base64.decodeBase64(token), "UTF-8"));
} catch (Exception e) {
2021-02-05 16:52:19 +08:00
LOG.error(e.getMessage(), e);
2021-01-25 12:31:40 +08:00
throw new TokenException("Token解码异常");
}
JSONObject userInfoObj = JSONObject.parseObject(userInfo);
if (userInfoObj == null) {
throw new TokenException("Token非法");
}
String appTokenSign = userInfoObj.getString(ISystemConstant.APP_TOKEN_SIGN);
if (StringUtils.isBlank(appTokenSign)) {
2021-02-05 16:52:19 +08:00
LOG.debug("Token标识为空");
2021-01-25 12:31:40 +08:00
throw new TokenException("Token非法");
}
if (!StringUtils.startsWith(appTokenSign, ISystemConstant.APP_TOKEN_VERIFY)) {
2021-02-05 16:52:19 +08:00
LOG.debug("Token标识开头错误");
2021-01-25 12:31:40 +08:00
throw new TokenException("Token非法");
}
String[] appTokenSignArray = appTokenSign.split("_");
if (appTokenSignArray.length != 3) {
2021-02-05 16:52:19 +08:00
LOG.debug("Token标识格式长度异常应为3这里为{}", appTokenSignArray.length);
2021-01-25 12:31:40 +08:00
throw new TokenException("Token非法");
}
try {
new Date(Long.parseLong(appTokenSignArray[2]));
} catch (NumberFormatException e) {
e.printStackTrace();
2021-02-05 16:52:19 +08:00
LOG.debug("Token时间戳异常");
2021-01-25 12:31:40 +08:00
throw new TokenException("Token非法");
}
return JSONObject.toJavaObject(userInfoObj, AppTokenUser.class);
}
/**
* 当前用户列表
*
* @return
*/
2021-03-01 18:00:25 +08:00
@Override
2021-01-25 12:31:40 +08:00
public List<AppTokenUser> listCurrentUsers() {
2021-11-30 14:36:49 +08:00
return appTokenService.listCurrentUsers();
2021-01-25 12:31:40 +08:00
}
/**
* 清空超时Token
*/
public synchronized void clearTimeoutToken() {
2021-11-30 14:36:49 +08:00
appTokenService.clearTimeoutToken();
}
@Override
public void setAppTokenService(IAppTokenService appTokenService) {
this.appTokenService = appTokenService;
2021-01-25 12:31:40 +08:00
}
private static class AppTokenManagerBuilder {
public static final AppTokenManager appTokenManager = new AppTokenManager();
}
}