|
@@ -29,17 +29,28 @@ import java.util.concurrent.TimeUnit;
|
|
|
*/
|
|
|
@Component
|
|
|
public class TokenService {
|
|
|
- // 令牌自定义标识
|
|
|
+ /**
|
|
|
+ * 令牌自定义标识
|
|
|
+ */
|
|
|
@Value("${token.header}")
|
|
|
private String header;
|
|
|
|
|
|
- // 令牌秘钥
|
|
|
+ /**
|
|
|
+ * 令牌秘钥
|
|
|
+ */
|
|
|
@Value("${token.secret}")
|
|
|
private String secret;
|
|
|
|
|
|
- // 令牌有效期(默认30分钟)
|
|
|
+ /**
|
|
|
+ * 令牌有效期(默认30分钟)
|
|
|
+ */
|
|
|
@Value("${token.expireTime}")
|
|
|
private int expireTime;
|
|
|
+ /**
|
|
|
+ * 是否允许账户多终端同时登录(true允许 false不允许)
|
|
|
+ */
|
|
|
+ @Value("${token.soloLogin}")
|
|
|
+ private boolean soloLogin;
|
|
|
|
|
|
protected static final long MILLIS_SECOND = 1000;
|
|
|
|
|
@@ -92,6 +103,26 @@ public class TokenService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 删除用户身份信息
|
|
|
+ */
|
|
|
+ public void delLoginUser(String token, Long userId) {
|
|
|
+ if (StringUtils.isNotEmpty(token)) {
|
|
|
+ String userKey = getTokenKey(token);
|
|
|
+ redisCache.deleteObject(userKey);
|
|
|
+ }
|
|
|
+ //在原有代码上添加下面的代码
|
|
|
+ if (!soloLogin && StringUtils.isNotNull(userId)) {
|
|
|
+ String userIdKey = getUserIdKey(userId);
|
|
|
+ redisCache.deleteObject(userIdKey);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getUserIdKey(Long userId) {
|
|
|
+ return Constants.LOGIN_USERID_KEY + userId;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
* 创建令牌
|
|
|
*
|
|
|
* @param loginUser 用户信息
|
|
@@ -133,6 +164,11 @@ public class TokenService {
|
|
|
// 根据uuid将loginUser缓存
|
|
|
String userKey = getTokenKey(loginUser.getToken());
|
|
|
redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
|
|
|
+ if (!soloLogin) {
|
|
|
+ // 缓存用户唯一标识,防止同一帐号,同时登录
|
|
|
+ String userIdKey = getUserIdKey(loginUser.getUser().getUserId());
|
|
|
+ redisCache.setCacheObject(userIdKey, userKey, expireTime, TimeUnit.MINUTES);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|