diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index 728e1b274..d0d79316e 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -52,7 +52,6 @@ import java.util.concurrent.TimeUnit; */ @Slf4j @SaIgnore -@Validated @RequiredArgsConstructor @RestController @RequestMapping("/auth") @@ -76,7 +75,7 @@ public class AuthController { */ @ApiEncrypt @PostMapping("/login") - public R login(@Validated @RequestBody String body) { + public R login(@RequestBody String body) { LoginBody loginBody = JsonUtils.parseObject(body, LoginBody.class); ValidatorUtils.validate(loginBody); // 授权类型和客户端id diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java index ef5335fc7..37802b7f0 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java @@ -97,6 +97,9 @@ public class SysLoginService { public void logout() { try { LoginUser loginUser = LoginHelper.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + return; + } if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) { // 超级管理员 登出清除动态租户 TenantHelper.clearDynamic(); diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index 33f9f7fc4..ad37e90db 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -66,12 +66,6 @@ hutool-extra - - cn.hutool - hutool-json - provided - - org.projectlombok lombok diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java index 97b7041a2..2406ba904 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java @@ -15,6 +15,7 @@ import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.enums.UserType; import java.util.Set; +import java.util.function.Supplier; /** * 登录鉴权助手 @@ -36,6 +37,7 @@ public class LoginHelper { public static final String USER_KEY = "userId"; public static final String DEPT_KEY = "deptId"; public static final String CLIENT_KEY = "clientid"; + public static final String TENANT_ADMIN_KEY = "isTenantAdmin"; /** * 登录系统 基于 设备类型 @@ -55,32 +57,27 @@ public class LoginHelper { model.setExtra(TENANT_KEY, loginUser.getTenantId()) .setExtra(USER_KEY, loginUser.getUserId()) .setExtra(DEPT_KEY, loginUser.getDeptId())); - StpUtil.getSession().set(LOGIN_USER_KEY, loginUser); + StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); } /** * 获取用户(多级缓存) */ public static LoginUser getLoginUser() { - LoginUser loginUser = (LoginUser) SaHolder.getStorage().get(LOGIN_USER_KEY); - if (loginUser != null) { - return loginUser; - } - SaSession session = StpUtil.getSession(); - if (ObjectUtil.isNull(session)) { - return null; - } - loginUser = (LoginUser) session.get(LOGIN_USER_KEY); - SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser); - return loginUser; + return (LoginUser) getStorageIfAbsentSet(LOGIN_USER_KEY, () -> { + SaSession session = StpUtil.getTokenSession(); + if (ObjectUtil.isNull(session)) { + return null; + } + return session.get(LOGIN_USER_KEY); + }); } /** * 获取用户基于token */ public static LoginUser getLoginUser(String token) { - Object loginId = StpUtil.getLoginIdByToken(token); - SaSession session = StpUtil.getSessionByLoginId(loginId); + SaSession session = StpUtil.getTokenSessionByToken(token); if (ObjectUtil.isNull(session)) { return null; } @@ -109,17 +106,7 @@ public class LoginHelper { } private static Object getExtra(String key) { - Object obj; - try { - obj = SaHolder.getStorage().get(key); - if (ObjectUtil.isNull(obj)) { - obj = StpUtil.getExtra(key); - SaHolder.getStorage().set(key, obj); - } - } catch (Exception e) { - return null; - } - return obj; + return getStorageIfAbsentSet(key, () -> StpUtil.getExtra(key)); } /** @@ -162,7 +149,26 @@ public class LoginHelper { } public static boolean isTenantAdmin() { - return isTenantAdmin(getLoginUser().getRolePermission()); + Object value = getStorageIfAbsentSet(TENANT_ADMIN_KEY, () -> { + return isTenantAdmin(getLoginUser().getRolePermission()); + }); + return Convert.toBool(value); } + public static boolean isLogin() { + return getLoginUser() != null; + } + + public static Object getStorageIfAbsentSet(String key, Supplier handle) { + try { + Object obj = SaHolder.getStorage().get(key); + if (ObjectUtil.isNull(obj)) { + obj = handle.get(); + SaHolder.getStorage().set(key, obj); + } + return obj; + } catch (Exception e) { + return null; + } + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java index 0d776d30e..f9c4b3d31 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java @@ -62,11 +62,12 @@ public class SysProfileController extends BaseController { @PutMapping public R updateProfile(@RequestBody SysUserProfileBo profile) { SysUserBo user = BeanUtil.toBean(profile, SysUserBo.class); + String username = LoginHelper.getUsername(); if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { - return R.fail("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); + return R.fail("修改用户'" + username + "'失败,手机号码已存在"); } if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) { - return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + return R.fail("修改用户'" + username + "'失败,邮箱账号已存在"); } user.setUserId(LoginHelper.getUserId()); if (userService.updateUserProfile(user) > 0) { diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java index 05eb4300b..5f4d121b1 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSensitiveServiceImpl.java @@ -23,7 +23,7 @@ public class SysSensitiveServiceImpl implements SensitiveService { */ @Override public boolean isSensitive(String roleKey, String perms) { - if (!StpUtil.isLogin()) { + if (!LoginHelper.isLogin()) { return true; } boolean roleExist = StringUtils.isNotBlank(roleKey);