diff --git a/opsli-base-support/opsli-common/src/main/java/org/opsli/common/enums/AlertType.java b/opsli-base-support/opsli-common/src/main/java/org/opsli/common/enums/AlertType.java
index 2498f98d..80370548 100644
--- a/opsli-base-support/opsli-common/src/main/java/org/opsli/common/enums/AlertType.java
+++ b/opsli-base-support/opsli-common/src/main/java/org/opsli/common/enums/AlertType.java
@@ -9,9 +9,10 @@ package org.opsli.common.enums;
public enum AlertType {
/** alert 弹出 */
- ALERT(),
+ ALERT,
/** JSON 回推*/
JSON,
+
;
}
diff --git a/opsli-base-support/opsli-common/src/main/java/org/opsli/common/enums/LoginLimitRefuse.java b/opsli-base-support/opsli-common/src/main/java/org/opsli/common/enums/LoginLimitRefuse.java
new file mode 100644
index 00000000..dcc903bc
--- /dev/null
+++ b/opsli-base-support/opsli-common/src/main/java/org/opsli/common/enums/LoginLimitRefuse.java
@@ -0,0 +1,40 @@
+/**
+ * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.opsli.common.enums;
+
+
+/**
+ * @BelongsProject: opsli-boot
+ * @BelongsPackage: org.opsli.common.enums
+ * @Author: Parker
+ * @CreateTime: 2020-09-17 23:40
+ * @Description: 登录拒绝策略
+ */
+public enum LoginLimitRefuse {
+
+ /**
+ * 前者
+ */
+ BEFORE,
+
+ /**
+ * 后者
+ */
+ AFTER;
+
+ ;
+
+}
diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/properties/GlobalProperties.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/properties/GlobalProperties.java
index 93de1f30..8ba74fbf 100644
--- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/properties/GlobalProperties.java
+++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/autoconfigure/properties/GlobalProperties.java
@@ -2,6 +2,7 @@ package org.opsli.core.autoconfigure.properties;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.opsli.common.enums.LoginLimitRefuse;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@@ -129,6 +130,12 @@ public class GlobalProperties {
@EqualsAndHashCode(callSuper = false)
public static class Login {
+ /** 限制登录数量 -1 为无限大 */
+ private Integer limitCount;
+
+ /** 限制登录拒绝策略 after为后者 before为前者 */
+ private LoginLimitRefuse limitRefuse = LoginLimitRefuse.AFTER;
+
/** 失败次数 */
private Integer slipCount;
@@ -138,7 +145,9 @@ public class GlobalProperties {
/** 失败锁定时间(秒) */
private Integer slipLockSpeed;
+
}
+
}
/**
diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/msg/TokenMsg.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/msg/TokenMsg.java
index 5df7730a..f4a2b3a6 100644
--- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/msg/TokenMsg.java
+++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/msg/TokenMsg.java
@@ -30,6 +30,8 @@ public enum TokenMsg implements BaseMsg {
* Token
*/
EXCEPTION_TOKEN_CREATE_ERROR(12000,"生成Token失败"),
+ EXCEPTION_TOKEN_CREATE_LIMIT_ERROR(12001,"您的账号已在其他设备登录"),
+
EXCEPTION_TOKEN_LOSE_EFFICACY(401,"Token失效,请重新登录"),
diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java
index 4048d6b7..a9aa8056 100644
--- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java
+++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java
@@ -20,7 +20,9 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
-import com.google.common.collect.Maps;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.crypto.hash.Md5Hash;
@@ -29,6 +31,7 @@ import org.opsli.api.wrapper.system.user.UserModel;
import org.opsli.common.constants.SignConstants;
import org.opsli.common.constants.TokenConstants;
import org.opsli.common.constants.TokenTypeConstants;
+import org.opsli.common.enums.LoginLimitRefuse;
import org.opsli.common.exception.TokenException;
import org.opsli.core.autoconfigure.properties.GlobalProperties;
import org.opsli.core.cache.local.CacheUtil;
@@ -41,7 +44,6 @@ import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
-import java.util.Map;
import static org.opsli.common.constants.OrderConstants.UTIL_ORDER;
@@ -65,13 +67,10 @@ public class UserTokenUtil {
public static final String ACCOUNT_SLIP_COUNT_PREFIX;
/** 账号失败锁定KEY */
public static final String ACCOUNT_SLIP_LOCK_PREFIX;
- /** 账号失败阈值 */
- public static int ACCOUNT_SLIP_COUNT;
- /** 账号失败N次后弹出验证码 */
- public static int ACCOUNT_SLIP_VERIFY_COUNT;
- /** 账号锁定时间 */
- public static int ACCOUNT_SLIP_LOCK_SPEED;
-
+ /** 限制登录数量 -1 为无限大 */
+ public static final int ACCOUNT_LIMIT_INFINITE = -1;
+ /** 登录配置信息 */
+ public static GlobalProperties.Auth.Login LOGIN_PROPERTIES;
/** Redis插件 */
private static RedisPlugin redisPlugin;
@@ -89,15 +88,31 @@ public class UserTokenUtil {
* @param user 用户
* @return
*/
- public static ResultVo