mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-20 10:13:28 +08:00
update 优化获取token工具类逻辑
This commit is contained in:
parent
6d432b46d8
commit
cc6c1f7dc4
@ -18,7 +18,7 @@ import org.dromara.common.core.domain.model.SocialLoginBody;
|
|||||||
import org.dromara.common.core.utils.*;
|
import org.dromara.common.core.utils.*;
|
||||||
import org.dromara.common.encrypt.annotation.ApiEncrypt;
|
import org.dromara.common.encrypt.annotation.ApiEncrypt;
|
||||||
import org.dromara.common.json.utils.JsonUtils;
|
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.SocialLoginConfigProperties;
|
||||||
import org.dromara.common.social.config.properties.SocialProperties;
|
import org.dromara.common.social.config.properties.SocialProperties;
|
||||||
import org.dromara.common.social.utils.SocialUtils;
|
import org.dromara.common.social.utils.SocialUtils;
|
||||||
@ -95,7 +95,7 @@ public class AuthController {
|
|||||||
// 登录
|
// 登录
|
||||||
LoginVo loginVo = IAuthStrategy.login(body, client, grantType);
|
LoginVo loginVo = IAuthStrategy.login(body, client, grantType);
|
||||||
|
|
||||||
String tokenId = LoginHelper.getTokenId();
|
String tokenId = TokenUtils.getTokenId();
|
||||||
scheduledExecutorService.schedule(() -> {
|
scheduledExecutorService.schedule(() -> {
|
||||||
WebSocketMessageDto dto = new WebSocketMessageDto();
|
WebSocketMessageDto dto = new WebSocketMessageDto();
|
||||||
dto.setMessage("欢迎登录RuoYi-Vue-Plus后台管理系统");
|
dto.setMessage("欢迎登录RuoYi-Vue-Plus后台管理系统");
|
||||||
|
|||||||
@ -3,7 +3,6 @@ package org.dromara.common.satoken.utils;
|
|||||||
import cn.dev33.satoken.session.SaSession;
|
import cn.dev33.satoken.session.SaSession;
|
||||||
import cn.dev33.satoken.stp.SaLoginModel;
|
import cn.dev33.satoken.stp.SaLoginModel;
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
@ -11,13 +10,9 @@ import lombok.NoArgsConstructor;
|
|||||||
import org.dromara.common.core.constant.TenantConstants;
|
import org.dromara.common.core.constant.TenantConstants;
|
||||||
import org.dromara.common.core.constant.UserConstants;
|
import org.dromara.common.core.constant.UserConstants;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.core.enums.DeviceType;
|
|
||||||
import org.dromara.common.core.enums.UserType;
|
import org.dromara.common.core.enums.UserType;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
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_KEY = "deptId";
|
||||||
public static final String DEPT_NAME_KEY = "deptName";
|
public static final String DEPT_NAME_KEY = "deptName";
|
||||||
public static final String CLIENT_KEY = "clientid";
|
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);
|
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
|
* 获取用户基于token
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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<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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -2,7 +2,7 @@ package org.dromara.common.websocket.handler;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
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.dto.WebSocketMessageDto;
|
||||||
import org.dromara.common.websocket.holder.WebSocketSessionHolder;
|
import org.dromara.common.websocket.holder.WebSocketSessionHolder;
|
||||||
import org.dromara.common.websocket.utils.WebSocketUtils;
|
import org.dromara.common.websocket.utils.WebSocketUtils;
|
||||||
@ -43,7 +43,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
|
|||||||
@Override
|
@Override
|
||||||
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
||||||
LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
|
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 webSocketMessageDto = new WebSocketMessageDto();
|
||||||
webSocketMessageDto.setSessionKeys(tokenIds);
|
webSocketMessageDto.setSessionKeys(tokenIds);
|
||||||
webSocketMessageDto.setMessage(message.getPayload());
|
webSocketMessageDto.setMessage(message.getPayload());
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package org.dromara.common.websocket.interceptor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
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.ServerHttpRequest;
|
||||||
import org.springframework.http.server.ServerHttpResponse;
|
import org.springframework.http.server.ServerHttpResponse;
|
||||||
import org.springframework.web.socket.WebSocketHandler;
|
import org.springframework.web.socket.WebSocketHandler;
|
||||||
@ -33,7 +34,7 @@ public class PlusWebSocketInterceptor implements HandshakeInterceptor {
|
|||||||
@Override
|
@Override
|
||||||
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
|
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
String tokenId = LoginHelper.getTokenId();
|
String tokenId = TokenUtils.getTokenId();
|
||||||
attributes.put(LOGIN_USER_KEY, loginUser);
|
attributes.put(LOGIN_USER_KEY, loginUser);
|
||||||
attributes.put(TOKEN_ID_KEY, tokenId);
|
attributes.put(TOKEN_ID_KEY, tokenId);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -12,7 +12,7 @@ import org.dromara.common.core.utils.StreamUtils;
|
|||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.core.utils.reflect.ReflectUtils;
|
import org.dromara.common.core.utils.reflect.ReflectUtils;
|
||||||
import org.dromara.common.mail.utils.MailUtils;
|
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.tenant.helper.TenantHelper;
|
||||||
import org.dromara.common.websocket.dto.WebSocketMessageDto;
|
import org.dromara.common.websocket.dto.WebSocketMessageDto;
|
||||||
import org.dromara.common.websocket.utils.WebSocketUtils;
|
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.common.enums.TaskStatusEnum;
|
||||||
import org.dromara.workflow.domain.ActHiProcinst;
|
import org.dromara.workflow.domain.ActHiProcinst;
|
||||||
import org.dromara.workflow.domain.ActHiTaskinst;
|
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.flowable.cmd.UpdateHiTaskInstCmd;
|
||||||
import org.dromara.workflow.mapper.ActHiTaskinstMapper;
|
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.BpmnModel;
|
||||||
import org.flowable.bpmn.model.FlowNode;
|
import org.flowable.bpmn.model.FlowNode;
|
||||||
import org.flowable.common.engine.api.delegate.Expression;
|
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 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) {
|
switch (messageTypeEnum) {
|
||||||
case SYSTEM_MESSAGE:
|
case SYSTEM_MESSAGE:
|
||||||
WebSocketMessageDto dto = new WebSocketMessageDto();
|
WebSocketMessageDto dto = new WebSocketMessageDto();
|
||||||
dto.setSessionKeys(LoginHelper.getTokenUserIds(userIds));
|
dto.setSessionKeys(TokenUtils.getTokenUserIds(userIds));
|
||||||
dto.setMessage(message);
|
dto.setMessage(message);
|
||||||
WebSocketUtils.publishMessage(dto);
|
WebSocketUtils.publishMessage(dto);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user