From cc6c1f7dc4bf476a5969f3ab3302061a1edcbf3e Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Thu, 11 Apr 2024 09:24:37 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E8=8E=B7=E5=8F=96to?= =?UTF-8?q?ken=E5=B7=A5=E5=85=B7=E7=B1=BB=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/AuthController.java | 4 +- .../common/satoken/utils/LoginHelper.java | 54 ------------ .../common/satoken/utils/TokenUtils.java | 88 +++++++++++++++++++ .../handler/PlusWebSocketHandler.java | 4 +- .../interceptor/PlusWebSocketInterceptor.java | 3 +- .../dromara/workflow/utils/WorkflowUtils.java | 13 +-- 6 files changed, 102 insertions(+), 64 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/TokenUtils.java 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 98528e2ec..c4b9feae8 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 @@ -18,7 +18,7 @@ import org.dromara.common.core.domain.model.SocialLoginBody; import org.dromara.common.core.utils.*; import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.dromara.common.json.utils.JsonUtils; -import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.satoken.utils.TokenUtils; import org.dromara.common.social.config.properties.SocialLoginConfigProperties; import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.utils.SocialUtils; @@ -95,7 +95,7 @@ public class AuthController { // 登录 LoginVo loginVo = IAuthStrategy.login(body, client, grantType); - String tokenId = LoginHelper.getTokenId(); + String tokenId = TokenUtils.getTokenId(); scheduledExecutorService.schedule(() -> { WebSocketMessageDto dto = new WebSocketMessageDto(); dto.setMessage("欢迎登录RuoYi-Vue-Plus后台管理系统"); 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 e365b1d39..21acfb1d1 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 @@ -3,7 +3,6 @@ package org.dromara.common.satoken.utils; import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import lombok.AccessLevel; @@ -11,13 +10,9 @@ import lombok.NoArgsConstructor; import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.domain.model.LoginUser; -import org.dromara.common.core.enums.DeviceType; import org.dromara.common.core.enums.UserType; -import java.util.Collections; -import java.util.List; import java.util.Set; -import java.util.stream.Collectors; /** * 登录鉴权助手 @@ -41,7 +36,6 @@ public class LoginHelper { public static final String DEPT_KEY = "deptId"; public static final String DEPT_NAME_KEY = "deptName"; public static final String CLIENT_KEY = "clientid"; - public static final String SYS_USER = "sys_user:"; /** * 登录系统 基于 设备类型 @@ -75,54 +69,6 @@ public class LoginHelper { return (LoginUser) session.get(LOGIN_USER_KEY); } - /** - * 获取当前登录用户的token - */ - public static String getTokenId() { - return StpUtil.getTokenInfo().getTokenValue() ; - } - - /** - * 获取当前用户的 token 集合 - */ - public static List getTokenIds() { - return StpUtil.getTokenValueListByLoginId(SYS_USER + getUserId()); - } - - /** - * 获取当前用户 指定设备类型端的 token 集合 - */ - public static List getTokenIds(DeviceType device) { - return StpUtil.getTokenValueListByLoginId(SYS_USER + getUserId(), device.getDevice()); - } - - /** - * 获取指定账号 userId 的 token 集合 - */ - public static List getTokenIds(Long userId) { - return StpUtil.getTokenValueListByLoginId(SYS_USER + userId); - } - - /** - * 获取指定账号 userIds 的 token 集合 - */ - public static List getTokenUserIds(Set userIds) { - if (CollUtil.isNotEmpty(userIds)) { - return userIds.stream() - .flatMap(userId -> StpUtil.getTokenValueListByLoginId(SYS_USER + userId).stream()) - .collect(Collectors.toList()); - } else { - return Collections.emptyList(); - } - } - - /** - * 获取指定账号 userId 指定设备类型端的 token 集合 - */ - public static List getTokenIds(Long userId, DeviceType device) { - return StpUtil.getTokenValueListByLoginId(SYS_USER + userId, device.getDevice()); - } - /** * 获取用户基于token */ diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/TokenUtils.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/TokenUtils.java new file mode 100644 index 000000000..d005851ab --- /dev/null +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/TokenUtils.java @@ -0,0 +1,88 @@ +package org.dromara.common.satoken.utils; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.dromara.common.core.enums.DeviceType; + +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * token工具类 + * + * @author 21001 + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class TokenUtils { + + /** + * 会话id(loginId)前缀 + */ + public static final String SYS_USER = "sys_user:"; + + /** + * 获取当前登录用户的token + */ + public static String getTokenId() { + return StpUtil.getTokenInfo().getTokenValue(); + } + + /** + * 获取当前用户的 token 集合 + */ + public static List getTokenIds() { + return StpUtil.getTokenValueListByLoginId(SYS_USER + LoginHelper.getUserId()); + } + + /** + * 获取当前用户 指定设备类型端的 token 集合 + */ + public static List getTokenIds(DeviceType device) { + return StpUtil.getTokenValueListByLoginId(SYS_USER + LoginHelper.getUserId(), device.getDevice()); + } + + /** + * 获取指定账号 userId 的 token 集合 + */ + public static List getTokenIds(Long userId) { + return StpUtil.getTokenValueListByLoginId(SYS_USER + userId); + } + + /** + * 获取账号 userId 指定设备类型端的 token 集合 + */ + public static List getTokenIds(Long userId, DeviceType device) { + return StpUtil.getTokenValueListByLoginId(SYS_USER + userId, device.getDevice()); + } + + /** + * 获取指定账号 userIds 的 token 集合 + */ + public static List getTokenUserIds(Set userIds) { + if (CollUtil.isEmpty(userIds)) { + return Collections.emptyList(); + } + return userIds.stream() + .flatMap(userId -> StpUtil.getTokenValueListByLoginId(SYS_USER + userId) + .stream()) + .collect(Collectors.toList()); + } + + /** + * 获取账号 userIds 指定设备类型端的 token 集合 + */ + public static List getTokenUserIds(Set userIds, DeviceType device) { + if (CollUtil.isEmpty(userIds)) { + return Collections.emptyList(); + } + return userIds.stream() + .flatMap(userId -> StpUtil.getTokenValueListByLoginId(SYS_USER + userId, device.getDevice()) + .stream()) + .collect(Collectors.toList()); + } + +} diff --git a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java index 6b6b42bd5..0845a88bd 100644 --- a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java +++ b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java @@ -2,7 +2,7 @@ package org.dromara.common.websocket.handler; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.model.LoginUser; -import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.satoken.utils.TokenUtils; import org.dromara.common.websocket.dto.WebSocketMessageDto; import org.dromara.common.websocket.holder.WebSocketSessionHolder; import org.dromara.common.websocket.utils.WebSocketUtils; @@ -43,7 +43,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY); - List tokenIds = LoginHelper.getTokenIds(loginUser.getUserId()); + List tokenIds = TokenUtils.getTokenIds(loginUser.getUserId()); WebSocketMessageDto webSocketMessageDto = new WebSocketMessageDto(); webSocketMessageDto.setSessionKeys(tokenIds); webSocketMessageDto.setMessage(message.getPayload()); diff --git a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java index 4770945c1..5a114fa4f 100644 --- a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java +++ b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java @@ -3,6 +3,7 @@ package org.dromara.common.websocket.interceptor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.satoken.utils.TokenUtils; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.WebSocketHandler; @@ -33,7 +34,7 @@ public class PlusWebSocketInterceptor implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) { LoginUser loginUser = LoginHelper.getLoginUser(); - String tokenId = LoginHelper.getTokenId(); + String tokenId = TokenUtils.getTokenId(); attributes.put(LOGIN_USER_KEY, loginUser); attributes.put(TOKEN_ID_KEY, tokenId); return true; diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java index 03cac75fe..f82e36b47 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java @@ -12,7 +12,7 @@ import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.reflect.ReflectUtils; import org.dromara.common.mail.utils.MailUtils; -import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.satoken.utils.TokenUtils; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.websocket.dto.WebSocketMessageDto; import org.dromara.common.websocket.utils.WebSocketUtils; @@ -24,10 +24,13 @@ import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.ActHiProcinst; import org.dromara.workflow.domain.ActHiTaskinst; -import org.dromara.workflow.domain.vo.*; +import org.dromara.workflow.domain.vo.MultiInstanceVo; +import org.dromara.workflow.domain.vo.ParticipantVo; +import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd; import org.dromara.workflow.mapper.ActHiTaskinstMapper; -import org.dromara.workflow.service.*; +import org.dromara.workflow.service.IActHiProcinstService; +import org.dromara.workflow.service.IWorkflowUserService; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.common.engine.api.delegate.Expression; @@ -42,7 +45,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity; import java.util.*; -import static org.dromara.workflow.common.constant.FlowConstant.*; +import static org.dromara.workflow.common.constant.FlowConstant.PROCESS_INSTANCE_VO; /** * 工作流工具 @@ -325,7 +328,7 @@ public class WorkflowUtils { switch (messageTypeEnum) { case SYSTEM_MESSAGE: WebSocketMessageDto dto = new WebSocketMessageDto(); - dto.setSessionKeys(LoginHelper.getTokenUserIds(userIds)); + dto.setSessionKeys(TokenUtils.getTokenUserIds(userIds)); dto.setMessage(message); WebSocketUtils.publishMessage(dto); break;