update 优化获取token工具类逻辑

This commit is contained in:
AprilWind 2024-04-11 09:24:37 +08:00
parent 6d432b46d8
commit cc6c1f7dc4
6 changed files with 102 additions and 64 deletions

View File

@ -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后台管理系统");

View File

@ -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<String> getTokenIds() {
return StpUtil.getTokenValueListByLoginId(SYS_USER + getUserId());
}
/**
* 获取当前用户 指定设备类型端的 token 集合
*/
public static List<String> getTokenIds(DeviceType device) {
return StpUtil.getTokenValueListByLoginId(SYS_USER + getUserId(), device.getDevice());
}
/**
* 获取指定账号 userId token 集合
*/
public static List<String> getTokenIds(Long userId) {
return StpUtil.getTokenValueListByLoginId(SYS_USER + userId);
}
/**
* 获取指定账号 userIds token 集合
*/
public static List<String> getTokenUserIds(Set<Long> 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<String> getTokenIds(Long userId, DeviceType device) {
return StpUtil.getTokenValueListByLoginId(SYS_USER + userId, device.getDevice());
}
/**
* 获取用户基于token
*/

View File

@ -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 {
/**
* 会话idloginId前缀
*/
public static final String SYS_USER = "sys_user:";
/**
* 获取当前登录用户的token
*/
public static String getTokenId() {
return StpUtil.getTokenInfo().getTokenValue();
}
/**
* 获取当前用户的 token 集合
*/
public static List<String> getTokenIds() {
return StpUtil.getTokenValueListByLoginId(SYS_USER + LoginHelper.getUserId());
}
/**
* 获取当前用户 指定设备类型端的 token 集合
*/
public static List<String> getTokenIds(DeviceType device) {
return StpUtil.getTokenValueListByLoginId(SYS_USER + LoginHelper.getUserId(), device.getDevice());
}
/**
* 获取指定账号 userId token 集合
*/
public static List<String> getTokenIds(Long userId) {
return StpUtil.getTokenValueListByLoginId(SYS_USER + userId);
}
/**
* 获取账号 userId 指定设备类型端的 token 集合
*/
public static List<String> getTokenIds(Long userId, DeviceType device) {
return StpUtil.getTokenValueListByLoginId(SYS_USER + userId, device.getDevice());
}
/**
* 获取指定账号 userIds token 集合
*/
public static List<String> getTokenUserIds(Set<Long> 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<String> getTokenUserIds(Set<Long> 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());
}
}

View File

@ -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<String> tokenIds = LoginHelper.getTokenIds(loginUser.getUserId());
List<String> tokenIds = TokenUtils.getTokenIds(loginUser.getUserId());
WebSocketMessageDto webSocketMessageDto = new WebSocketMessageDto();
webSocketMessageDto.setSessionKeys(tokenIds);
webSocketMessageDto.setMessage(message.getPayload());

View File

@ -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<String, Object> 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;

View File

@ -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;