From a43e6e06e086e778e6ac3fdba7b5e8fafa090ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 17 Jan 2022 12:03:15 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E5=A4=9A=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BD=93=E7=B3=BB=E5=A4=84=E7=90=86=20=E6=9B=B4?= =?UTF-8?q?=E5=90=8D=20LoginUtils=20=E4=B8=BA=20LoginHelper=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20LoginUser=20=E5=A4=9A=E7=BA=A7=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../controller/system/SysLoginController.java | 6 +- .../system/SysProfileController.java | 4 +- .../controller/system/SysRoleController.java | 4 +- .../common/convert/ExcelBigNumberConvert.java | 11 ++-- .../common/convert/ExcelDictConvert.java | 11 ++-- .../core/controller/BaseController.java | 10 +-- .../common/core/domain/model/LoginUser.java | 9 +++ .../java/com/ruoyi/common/enums/UserType.java | 11 ++++ .../common/helper/DataPermissionHelper.java | 3 + .../LoginHelper.java} | 64 ++++++++++--------- .../ruoyi/framework/aspectj/LogAspect.java | 4 +- .../ruoyi/framework/config/SaTokenConfig.java | 35 ++++++---- .../CreateAndUpdateMetaObjectHandler.java | 4 +- .../handler/PlusDataPermissionHandler.java | 4 +- .../listener/UserActionListener.java | 16 +++-- .../satoken/service/SaInterfaceImpl.java | 10 +-- .../service/GenTableServiceImpl.java | 4 +- .../listener/SysUserImportListener.java | 4 +- .../ruoyi/system/service/SysLoginService.java | 4 +- .../service/impl/SysDeptServiceImpl.java | 4 +- .../service/impl/SysRoleServiceImpl.java | 4 +- .../service/impl/SysSensitiveServiceImpl.java | 4 +- .../service/impl/SysUserServiceImpl.java | 4 +- 24 files changed, 140 insertions(+), 96 deletions(-) rename ruoyi-common/src/main/java/com/ruoyi/common/{utils/LoginUtils.java => helper/LoginHelper.java} (58%) diff --git a/pom.xml b/pom.xml index f68deb034..a0cc032cc 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ 3.0.3 1.5.22 4.1.2 - 2.2.11 + 3.0.5 3.3.0 2.3 1.28.0 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 6f9a1aa3f..40c315cb8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -8,7 +8,7 @@ import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.service.UserService; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.vo.RouterVo; import com.ruoyi.system.service.ISysMenuService; @@ -78,7 +78,7 @@ public class SysLoginController { @ApiOperation("获取用户信息") @GetMapping("getInfo") public AjaxResult> getInfo() { - SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginUtils.getUserId()); + SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginHelper.getUserId()); // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 @@ -98,7 +98,7 @@ public class SysLoginController { @ApiOperation("获取路由信息") @GetMapping("getRouters") public AjaxResult> getRouters() { - Long userId = LoginUtils.getUserId(); + Long userId = LoginHelper.getUserId(); List menus = menuService.selectMenuTreeByUserId(userId); return AjaxResult.success(menuService.buildMenus(menus)); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java index 155d510df..0fa8e1ed1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java @@ -7,7 +7,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.service.UserService; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -91,7 +91,7 @@ public class SysProfileController extends BaseController { @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping("/updatePwd") public AjaxResult updatePwd(String oldPassword, String newPassword) { - SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginUtils.getUserId()); + SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginHelper.getUserId()); String userName = user.getUserName(); String password = user.getPassword(); if (!SecurityUtils.matchesPassword(oldPassword, password)) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java index b633d5f5e..a4ca4f0d9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -11,7 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysUserRole; @@ -107,7 +107,7 @@ public class SysRoleController extends BaseController { SysUser sysUser = userService.selectUserById(loginUser.getUserId()); if (StringUtils.isNotNull(sysUser) && !sysUser.isAdmin()) { loginUser.setMenuPermission(permissionService.getMenuPermission(sysUser)); - LoginUtils.setLoginUser(loginUser); + LoginHelper.setLoginUser(loginUser); } return AjaxResult.success(); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelBigNumberConvert.java b/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelBigNumberConvert.java index 690b47917..432ab74ec 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelBigNumberConvert.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelBigNumberConvert.java @@ -4,8 +4,9 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; -import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.metadata.property.ExcelContentProperty; import lombok.extern.slf4j.Slf4j; @@ -31,19 +32,19 @@ public class ExcelBigNumberConvert implements Converter { } @Override - public Long convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + public Long convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { return Convert.toLong(cellData.getData()); } @Override - public CellData convertToExcelData(Long object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + public WriteCellData convertToExcelData(Long object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (ObjectUtil.isNotNull(object)) { String str = Convert.toStr(object); if (str.length() > 15) { - return new CellData<>(str); + return new WriteCellData<>(str); } } - CellData cellData = new CellData<>(new BigDecimal(object)); + WriteCellData cellData = new WriteCellData<>(new BigDecimal(object)); cellData.setType(CellDataTypeEnum.NUMBER); return cellData; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java b/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java index cf612c986..ca4303e58 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java @@ -4,8 +4,9 @@ import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.convert.Convert; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; -import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.metadata.property.ExcelContentProperty; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.core.service.DictService; @@ -35,7 +36,7 @@ public class ExcelDictConvert implements Converter { } @Override - public Object convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + public Object convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { ExcelDictFormat anno = getAnnotation(contentProperty.getField()); String type = anno.dictType(); String label = cellData.getStringValue(); @@ -49,9 +50,9 @@ public class ExcelDictConvert implements Converter { } @Override - public CellData convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + public WriteCellData convertToExcelData(Object object, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (StringUtils.isNull(object)) { - return new CellData<>(""); + return new WriteCellData<>(""); } ExcelDictFormat anno = getAnnotation(contentProperty.getField()); String type = anno.dictType(); @@ -62,7 +63,7 @@ public class ExcelDictConvert implements Converter { } else { label = SpringUtils.getBean(DictService.class).getDictLabel(type, value, anno.separator()); } - return new CellData<>(label); + return new WriteCellData<>(label); } private ExcelDictFormat getAnnotation(Field field) { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java index 4c5e1977c..26e00dff6 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java @@ -2,7 +2,7 @@ package com.ruoyi.common.core.controller; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.LoginUser; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; /** @@ -71,27 +71,27 @@ public class BaseController { * 获取用户缓存信息 */ public LoginUser getLoginUser() { - return LoginUtils.getLoginUser(); + return LoginHelper.getLoginUser(); } /** * 获取登录用户id */ public Long getUserId() { - return LoginUtils.getUserId(); + return LoginHelper.getUserId(); } /** * 获取登录部门id */ public Long getDeptId() { - return LoginUtils.getDeptId(); + return LoginHelper.getDeptId(); } /** * 获取登录用户名 */ public String getUsername() { - return LoginUtils.getUsername(); + return LoginHelper.getUsername(); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java index 7554e3f4b..215eb57c8 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java @@ -35,6 +35,11 @@ public class LoginUser implements Serializable { */ private String token; + /** + * 用户类型 + */ + private String userType; + /** * 登录时间 */ @@ -80,4 +85,8 @@ public class LoginUser implements Serializable { */ private String username; + public String getLoginId() { + return userType + userId; + } + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserType.java index 9c3b53195..a5f12f020 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserType.java @@ -1,5 +1,7 @@ package com.ruoyi.common.enums; +import com.ruoyi.common.exception.UtilException; +import com.ruoyi.common.utils.StringUtils; import lombok.AllArgsConstructor; import lombok.Getter; @@ -24,4 +26,13 @@ public enum UserType { APP_USER("app_user:"); private final String userType; + + public static UserType getUserType(String str) { + for (UserType value : values()) { + if (StringUtils.contains(str, value.getUserType())) { + return value; + } + } + throw new RuntimeException("'UserType' not found By " + str); + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java index 78dd8b6fc..ec4d56767 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java @@ -2,6 +2,8 @@ package com.ruoyi.common.helper; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.utils.ServletUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; @@ -13,6 +15,7 @@ import java.util.Map; * @author Lion Li * @version 3.5.0 */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) @SuppressWarnings("unchecked cast") public class DataPermissionHelper { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/LoginUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java similarity index 58% rename from ruoyi-common/src/main/java/com/ruoyi/common/utils/LoginUtils.java rename to ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java index a4523863f..ddd501888 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/LoginUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java @@ -1,4 +1,4 @@ -package com.ruoyi.common.utils; +package com.ruoyi.common.helper; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.ObjectUtil; @@ -6,19 +6,21 @@ import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.enums.DeviceType; import com.ruoyi.common.enums.UserType; import com.ruoyi.common.exception.UtilException; +import com.ruoyi.common.utils.StringUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; /** - * 登录鉴权工具 + * 登录鉴权助手 * 为适配多端登录而封装 * * @author Lion Li */ @NoArgsConstructor(access = AccessLevel.PRIVATE) -public class LoginUtils { +public class LoginHelper { private static final String LOGIN_USER_KEY = "loginUser"; + private static final ThreadLocal LOGIN_CACHE = new ThreadLocal<>(); /** * 登录系统 @@ -26,8 +28,8 @@ public class LoginUtils { * * @param loginUser 登录用户信息 */ - public static void login(LoginUser loginUser, UserType userType) { - StpUtil.login(userType.getUserType() + loginUser.getUserId()); + public static void login(LoginUser loginUser) { + StpUtil.login(loginUser.getLoginId()); setLoginUser(loginUser); } @@ -37,25 +39,37 @@ public class LoginUtils { * * @param loginUser 登录用户信息 */ - public static void loginByDevice(LoginUser loginUser, UserType userType, DeviceType deviceType) { - StpUtil.login(userType.getUserType() + loginUser.getUserId(), deviceType.getDevice()); + public static void loginByDevice(LoginUser loginUser, DeviceType deviceType) { + StpUtil.login(loginUser.getLoginId(), deviceType.getDevice()); setLoginUser(loginUser); } /** - * 设置用户数据 + * 设置用户数据(多级缓存) */ public static void setLoginUser(LoginUser loginUser) { StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); + LOGIN_CACHE.set(loginUser); } /** - * 获取用户 - **/ + * 获取用户(多级缓存) + */ public static LoginUser getLoginUser() { + LoginUser loginUser = LOGIN_CACHE.get(); + if (loginUser != null) { + return loginUser; + } return (LoginUser) StpUtil.getTokenSession().get(LOGIN_USER_KEY); } + /** + * 清除一级缓存 防止内存问题 + */ + public static void clearCache() { + LOGIN_CACHE.remove(); + } + /** * 获取用户id */ @@ -63,13 +77,13 @@ public class LoginUtils { LoginUser loginUser = getLoginUser(); if (ObjectUtil.isNull(loginUser)) { String loginId = StpUtil.getLoginIdAsString(); - String userId; - String replace = ""; - if (StringUtils.contains(loginId, UserType.SYS_USER.getUserType())) { - userId = StringUtils.replace(loginId, UserType.SYS_USER.getUserType(), replace); - } else if (StringUtils.contains(loginId, UserType.APP_USER.getUserType())) { - userId = StringUtils.replace(loginId, UserType.APP_USER.getUserType(), replace); - } else { + String userId = null; + for (UserType value : UserType.values()) { + if (StringUtils.contains(loginId, value.getUserType())) { + userId = StringUtils.replace(loginId, value.getUserType(), StringUtils.EMPTY); + } + } + if (StringUtils.isBlank(userId)) { throw new UtilException("登录用户: LoginId异常 => " + loginId); } return Long.parseLong(userId); @@ -79,14 +93,14 @@ public class LoginUtils { /** * 获取部门ID - **/ + */ public static Long getDeptId() { return getLoginUser().getDeptId(); } /** * 获取用户账户 - **/ + */ public static String getUsername() { return getLoginUser().getUsername(); } @@ -96,17 +110,7 @@ public class LoginUtils { */ public static UserType getUserType() { String loginId = StpUtil.getLoginIdAsString(); - return getUserType(loginId); - } - - public static UserType getUserType(Object loginId) { - if (StringUtils.contains(loginId.toString(), UserType.SYS_USER.getUserType())) { - return UserType.SYS_USER; - } else if (StringUtils.contains(loginId.toString(), UserType.APP_USER.getUserType())) { - return UserType.APP_USER; - } else { - throw new UtilException("登录用户: LoginId异常 => " + loginId); - } + return UserType.getUserType(loginId); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java index 0c656642a..49828ef7d 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -5,8 +5,8 @@ import com.ruoyi.common.core.domain.dto.OperLogDTO; import com.ruoyi.common.core.service.OperLogService; import com.ruoyi.common.enums.BusinessStatus; import com.ruoyi.common.enums.HttpMethod; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.JsonUtils; -import com.ruoyi.common.utils.LoginUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -66,7 +66,7 @@ public class LogAspect { String ip = ServletUtils.getClientIP(); operLog.setOperIp(ip); operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); - operLog.setOperName(LoginUtils.getUsername()); + operLog.setOperName(LoginHelper.getUsername()); if (e != null) { operLog.setStatus(BusinessStatus.FAIL.ordinal()); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java index 05cff030c..045981881 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java @@ -5,25 +5,30 @@ import cn.dev33.satoken.interceptor.SaRouteInterceptor; import cn.dev33.satoken.jwt.StpLogicJwtForStyle; import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.stp.StpLogic; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.config.properties.SecurityProperties; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * sa-token 配置 * * @author Lion Li */ +@RequiredArgsConstructor @Slf4j @Configuration public class SaTokenConfig implements WebMvcConfigurer { - @Autowired - private SecurityProperties securityProperties; + private final SecurityProperties securityProperties; /** * 注册sa-token的拦截器 @@ -39,16 +44,22 @@ public class SaTokenConfig implements WebMvcConfigurer { // 排除下不需要拦截的 .notMatch(securityProperties.getExcludes()) .check(() -> { - // 做一些访问检查 -// if (log.isDebugEnabled()) { -// Long userId = LoginUtils.getUserId(); -// if (StringUtils.isNotNull(userId)) { -// log.debug("剩余有效时间: {}", StpUtil.getTokenTimeout()); -// log.debug("临时有效时间: {}", StpUtil.getTokenActivityTimeout()); -// } -// } + Long userId = LoginHelper.getUserId(); + if (StringUtils.isNotNull(userId)) { + // 有效率影响 用于临时测试 + // if (log.isDebugEnabled()) { + // log.debug("剩余有效时间: {}", StpUtil.getTokenTimeout()); + // log.debug("临时有效时间: {}", StpUtil.getTokenActivityTimeout()); + // } + } }); - })).addPathPatterns("/**"); + }) { + @SuppressWarnings("all") + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + LoginHelper.clearCache(); + } + }).addPathPatterns("/**"); registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**"); } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java index f311a65c1..81051866c 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; @@ -78,7 +78,7 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { private String getLoginUsername() { LoginUser loginUser; try { - loginUser = LoginUtils.getLoginUser(); + loginUser = LoginHelper.getLoginUser(); } catch (Exception e) { log.warn("自动注入警告 => 用户未登录"); return null; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java index 2318f6f4e..5098917d6 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java @@ -13,7 +13,7 @@ import com.ruoyi.common.core.service.UserService; import com.ruoyi.common.enums.DataScopeType; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.DataPermissionHelper; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import lombok.extern.slf4j.Slf4j; @@ -76,7 +76,7 @@ public class PlusDataPermissionHandler { } SysUser currentUser = DataPermissionHelper.getVariable("user"); if (ObjectUtil.isNull(currentUser)) { - currentUser = SpringUtils.getBean(UserService.class).selectUserById(LoginUtils.getUserId()); + currentUser = SpringUtils.getBean(UserService.class).selectUserById(LoginHelper.getUserId()); DataPermissionHelper.setVariable("user", currentUser); } // 如果是超级管理员,则不过滤数据 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java index 9c91f2278..0b41e453e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java @@ -11,38 +11,40 @@ import com.ruoyi.common.core.domain.dto.UserOnlineDTO; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.service.UserService; import com.ruoyi.common.enums.UserType; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.utils.spring.SpringUtils; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * 用户行为 侦听器的实现 + * + * @author Lion Li */ +@RequiredArgsConstructor @Component @Slf4j public class UserActionListener implements SaTokenListener { - @Autowired - private SaTokenConfig saTokenConfig; + private final SaTokenConfig tokenConfig; /** * 每次登录时触发 */ @Override public void doLogin(String loginType, Object loginId, SaLoginModel loginModel) { - UserType userType = LoginUtils.getUserType(loginId); + UserType userType = UserType.getUserType(loginId.toString()); if (userType == UserType.SYS_USER) { UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent")); String ip = ServletUtils.getClientIP(); - SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginUtils.getUserId()); + SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginHelper.getUserId()); String tokenValue = StpUtil.getTokenValue(); UserOnlineDTO userOnlineDTO = new UserOnlineDTO() .setIpaddr(ip) @@ -55,7 +57,7 @@ public class UserActionListener implements SaTokenListener { if (StringUtils.isNotNull(user.getDept())) { userOnlineDTO.setDeptName(user.getDept().getDeptName()); } - RedisUtils.setCacheObject(Constants.ONLINE_TOKEN_KEY + tokenValue, userOnlineDTO, saTokenConfig.getTimeout(), TimeUnit.SECONDS); + RedisUtils.setCacheObject(Constants.ONLINE_TOKEN_KEY + tokenValue, userOnlineDTO, tokenConfig.getTimeout(), TimeUnit.SECONDS); log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue); } else if (userType == UserType.APP_USER) { // app端 自行根据业务编写 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/satoken/service/SaInterfaceImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/satoken/service/SaInterfaceImpl.java index e5bacd342..8e97d0578 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/satoken/service/SaInterfaceImpl.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/satoken/service/SaInterfaceImpl.java @@ -3,7 +3,7 @@ package com.ruoyi.framework.satoken.service; import cn.dev33.satoken.stp.StpInterface; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.enums.UserType; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -14,9 +14,9 @@ public class SaInterfaceImpl implements StpInterface { @Override public List getPermissionList(Object loginId, String loginType) { - UserType userType = LoginUtils.getUserType(loginId); + LoginUser loginUser = LoginHelper.getLoginUser(); + UserType userType = UserType.getUserType(loginUser.getUserType()); if (userType == UserType.SYS_USER) { - LoginUser loginUser = LoginUtils.getLoginUser(); return new ArrayList<>(loginUser.getMenuPermission()); } else if (userType == UserType.APP_USER) { // app端权限返回 自行根据业务编写 @@ -26,9 +26,9 @@ public class SaInterfaceImpl implements StpInterface { @Override public List getRoleList(Object loginId, String loginType) { - UserType userType = LoginUtils.getUserType(loginId); + LoginUser loginUser = LoginHelper.getLoginUser(); + UserType userType = UserType.getUserType(loginUser.getUserType()); if (userType == UserType.SYS_USER) { - LoginUser loginUser = LoginUtils.getLoginUser(); return new ArrayList<>(loginUser.getRolePermission()); } else if (userType == UserType.APP_USER) { // app端权限返回 自行根据业务编写 diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java index a09131270..93f72606c 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -10,8 +10,8 @@ import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.JsonUtils; -import com.ruoyi.common.utils.LoginUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.generator.domain.GenTable; @@ -161,7 +161,7 @@ public class GenTableServiceImpl implements IGenTableService { @Override @Transactional(rollbackFor = Exception.class) public void importGenTable(List tableList) { - String operName = LoginUtils.getUsername(); + String operName = LoginHelper.getUsername(); try { for (GenTable table : tableList) { String tableName = table.getTableName(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java index 9bd21d3bb..3c7bae365 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/SysUserImportListener.java @@ -7,7 +7,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.excel.ExcelListener; import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ValidatorUtils; @@ -45,7 +45,7 @@ public class SysUserImportListener extends AnalysisEventListener depts = SpringUtils.getAopProxy(this).selectDeptList(dept); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index 736b4e6a8..e6e12eee9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -8,7 +8,7 @@ import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.SysRoleDept; @@ -182,7 +182,7 @@ public class SysRoleServiceImpl implements ISysRoleService { */ @Override public void checkRoleDataScope(Long roleId) { - if (!SysUser.isAdmin(LoginUtils.getUserId())) { + if (!SysUser.isAdmin(LoginHelper.getUserId())) { SysRole role = new SysRole(); role.setRoleId(roleId); List roles = SpringUtils.getAopProxy(this).selectRoleList(role); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java index 7062d9652..40cae236b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java @@ -1,7 +1,7 @@ package com.ruoyi.system.service.impl; import com.ruoyi.common.core.service.SensitiveService; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.SecurityUtils; import org.springframework.stereotype.Service; @@ -21,7 +21,7 @@ public class SysSensitiveServiceImpl implements SensitiveService { */ @Override public boolean isSensitive() { - return SecurityUtils.isAdmin(LoginUtils.getUserId()); + return SecurityUtils.isAdmin(LoginHelper.getUserId()); } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 856a5f99e..dfa606cf2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -11,7 +11,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.UserService; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.LoginUtils; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.SysPost; @@ -208,7 +208,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { */ @Override public void checkUserDataScope(Long userId) { - if (!SysUser.isAdmin(LoginUtils.getUserId())) { + if (!SysUser.isAdmin(LoginHelper.getUserId())) { SysUser user = new SysUser(); user.setUserId(userId); List users = SpringUtils.getAopProxy(this).selectUserList(user);