From 7c5d64563927e1ba7867b1492f6c4b07d0b50a2e Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期二, 28 二月 2023 19:13:51 +0800
Subject: [PATCH] update 优化 只拦截系统内存在的路径 减少不必要的拦截造成的性能消耗
---
ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java | 93 +++++++++++++++++++++++++++++-----------------
1 files changed, 59 insertions(+), 34 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java
index f7fefa3..526b81f 100644
--- a/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java
+++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java
@@ -1,16 +1,19 @@
package com.ruoyi.common.satoken.utils;
import cn.dev33.satoken.context.SaHolder;
+import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
+import com.ruoyi.common.core.constant.TenantConstants;
import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.enums.DeviceType;
import com.ruoyi.common.core.enums.UserType;
-import com.ruoyi.common.core.exception.UtilException;
-import com.ruoyi.common.core.utils.StringUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+
+import java.util.Set;
/**
* 鐧诲綍閴存潈鍔╂墜
@@ -27,8 +30,9 @@
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class LoginHelper {
- public static final String JOIN_CODE = ":";
public static final String LOGIN_USER_KEY = "loginUser";
+ public static final String TENANT_KEY = "tenantId";
+ public static final String USER_KEY = "userId";
/**
* 鐧诲綍绯荤粺
@@ -36,9 +40,7 @@
* @param loginUser 鐧诲綍鐢ㄦ埛淇℃伅
*/
public static void login(LoginUser loginUser) {
- SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
- StpUtil.login(loginUser.getLoginId());
- setLoginUser(loginUser);
+ loginByDevice(loginUser, null);
}
/**
@@ -49,14 +51,13 @@
*/
public static void loginByDevice(LoginUser loginUser, DeviceType deviceType) {
SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
- StpUtil.login(loginUser.getLoginId(), deviceType.getDevice());
- setLoginUser(loginUser);
- }
-
- /**
- * 璁剧疆鐢ㄦ埛鏁版嵁(澶氱骇缂撳瓨)
- */
- public static void setLoginUser(LoginUser loginUser) {
+ SaLoginModel model = new SaLoginModel();
+ if (ObjectUtil.isNotNull(deviceType)) {
+ model.setDevice(deviceType.getDevice());
+ }
+ StpUtil.login(loginUser.getLoginId(),
+ model.setExtra(TENANT_KEY, loginUser.getTenantId())
+ .setExtra(USER_KEY, loginUser.getUserId()));
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
}
@@ -74,26 +75,36 @@
}
/**
+ * 鑾峰彇鐢ㄦ埛鍩轰簬token
+ */
+ public static LoginUser getLoginUser(String token) {
+ return (LoginUser) StpUtil.getTokenSessionByToken(token).get(LOGIN_USER_KEY);
+ }
+
+ /**
* 鑾峰彇鐢ㄦ埛id
*/
public static Long getUserId() {
- LoginUser loginUser = getLoginUser();
- if (ObjectUtil.isNull(loginUser)) {
- String loginId = StpUtil.getLoginIdAsString();
- String userId = null;
- for (UserType value : UserType.values()) {
- if (StringUtils.contains(loginId, value.getUserType())) {
- String[] strs = StringUtils.split(loginId, JOIN_CODE);
- // 鐢ㄦ埛id鍦ㄦ�绘槸鍦ㄦ渶鍚�
- userId = strs[strs.length - 1];
- }
- }
- if (StringUtils.isBlank(userId)) {
- throw new UtilException("鐧诲綍鐢ㄦ埛: LoginId寮傚父 => " + loginId);
- }
- return Long.parseLong(userId);
+ Long userId;
+ try {
+ userId = Convert.toLong(StpUtil.getExtra(USER_KEY));
+ } catch (Exception e) {
+ return null;
}
- return loginUser.getUserId();
+ return userId;
+ }
+
+ /**
+ * 鑾峰彇绉熸埛ID
+ */
+ public static String getTenantId() {
+ String tenantId;
+ try {
+ tenantId = (String) StpUtil.getExtra(TENANT_KEY);
+ } catch (Exception e) {
+ return null;
+ }
+ return tenantId;
}
/**
@@ -119,17 +130,31 @@
}
/**
- * 鏄惁涓虹鐞嗗憳
+ * 鏄惁涓鸿秴绾х鐞嗗憳
*
* @param userId 鐢ㄦ埛ID
* @return 缁撴灉
*/
- public static boolean isAdmin(Long userId) {
+ public static boolean isSuperAdmin(Long userId) {
return UserConstants.SUPER_ADMIN_ID.equals(userId);
}
- public static boolean isAdmin() {
- return isAdmin(getUserId());
+ public static boolean isSuperAdmin() {
+ return isSuperAdmin(getUserId());
+ }
+
+ /**
+ * 鏄惁涓鸿秴绾х鐞嗗憳
+ *
+ * @param rolePermission 瑙掕壊鏉冮檺鏍囪瘑缁�
+ * @return 缁撴灉
+ */
+ public static boolean isTenantAdmin(Set<String> rolePermission) {
+ return rolePermission.contains(TenantConstants.TENANT_ADMIN_ROLE_KEY);
+ }
+
+ public static boolean isTenantAdmin() {
+ return isTenantAdmin(getLoginUser().getRolePermission());
}
}
--
Gitblit v1.9.3