Browse Source

状态常量定义

wanggaokun 1 year ago
parent
commit
6b2bfaf70c

+ 2 - 2
eco-common/common-core/src/main/java/org/eco/common/core/constant/Constants.java

@@ -34,12 +34,12 @@ public class Constants {
     /**
      * 通用成功标识
      */
-    public static final String SUCCESS = "0";
+    public static final String SUCCESS = "1";
 
     /**
      * 通用失败标识
      */
-    public static final String FAIL = "1";
+    public static final String FAIL = "0";
 
     /**
      * 登录成功

+ 5 - 1
eco-common/common-websocket/src/main/java/org/eco/common/websocket/config/WebSocketConfig.java

@@ -16,7 +16,7 @@ import org.springframework.web.socket.server.HandshakeInterceptor;
 /**
  * WebSocket 配置
  *
- * @author zendwang
+ * @author gaokun wang
  */
 @AutoConfiguration
 @ConditionalOnProperty(value = "websocket.enabled", havingValue = "true")
@@ -28,15 +28,19 @@ public class WebSocketConfig {
     public WebSocketConfigurer webSocketConfigurer(HandshakeInterceptor handshakeInterceptor,
                                                    org.springframework.web.socket.WebSocketHandler webSocketHandler,
                                                    WebSocketProperties webSocketProperties) {
+        // 如果WebSocket的路径为空,则设置默认路径为 "/websocket"
         if (StrUtil.isBlank(webSocketProperties.getPath())) {
             webSocketProperties.setPath("/websocket");
         }
 
+        // 如果允许跨域访问的地址为空,则设置为 "*",表示允许所有来源的跨域请求
         if (StrUtil.isBlank(webSocketProperties.getAllowedOrigins())) {
             webSocketProperties.setAllowedOrigins("*");
         }
 
+        // 返回一个WebSocketConfigurer对象,用于配置WebSocket
         return registry -> registry
+            // 添加WebSocket处理程序和拦截器到指定路径,设置允许的跨域来源
             .addHandler(webSocketHandler, webSocketProperties.getPath())
             .addInterceptors(handshakeInterceptor)
             .setAllowedOrigins(webSocketProperties.getAllowedOrigins());

+ 1 - 1
eco-common/common-websocket/src/main/java/org/eco/common/websocket/config/properties/WebSocketProperties.java

@@ -6,7 +6,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 /**
  * WebSocket 配置项
  *
- * @author zendwang
+ * @author gaokun wang
  */
 @ConfigurationProperties("websocket")
 @Data

+ 1 - 1
eco-common/common-websocket/src/main/java/org/eco/common/websocket/constant/WebSocketConstants.java

@@ -3,7 +3,7 @@ package org.eco.common.websocket.constant;
 /**
  * websocket的常量配置
  *
- * @author zendwang
+ * @author gaokun wang
  */
 public interface WebSocketConstants {
     /**

+ 24 - 17
eco-common/common-websocket/src/main/java/org/eco/common/websocket/handler/FlexWebSocketHandler.java

@@ -18,7 +18,7 @@ import java.util.List;
 /**
  * WebSocketHandler 实现类
  *
- * @author zendwang
+ * @author gaokun wang
  */
 @Slf4j
 public class FlexWebSocketHandler extends AbstractWebSocketHandler {
@@ -36,9 +36,9 @@ public class FlexWebSocketHandler extends AbstractWebSocketHandler {
     /**
      * 处理发送来的文本消息
      *
-     * @param session
-     * @param message
-     * @throws Exception
+     * @param session WebSocket会话
+     * @param message 接收到的文本消息
+     * @throws Exception 处理消息过程中可能抛出的异常
      */
     @Override
     protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
@@ -50,17 +50,24 @@ public class FlexWebSocketHandler extends AbstractWebSocketHandler {
         WebSocketUtils.publishMessage(webSocketMessageDto);
     }
 
+    /**
+     * 处理接收到的二进制消息
+     *
+     * @param session WebSocket会话
+     * @param message 接收到的二进制消息
+     * @throws Exception 处理消息过程中可能抛出的异常
+     */
     @Override
     protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
         super.handleBinaryMessage(session, message);
     }
 
     /**
-     * 心跳监测的回复
+     * 处理接收到的Pong消息(心跳监测)
      *
-     * @param session
-     * @param message
-     * @throws Exception
+     * @param session WebSocket会话
+     * @param message 接收到的Pong消息
+     * @throws Exception 处理消息过程中可能抛出的异常
      */
     @Override
     protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
@@ -68,11 +75,11 @@ public class FlexWebSocketHandler extends AbstractWebSocketHandler {
     }
 
     /**
-     * 连接出错时
+     * 处理WebSocket传输错误
      *
-     * @param session
-     * @param exception
-     * @throws Exception
+     * @param session   WebSocket会话
+     * @param exception 发生的异常
+     * @throws Exception 处理过程中可能抛出的异常
      */
     @Override
     public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
@@ -80,10 +87,10 @@ public class FlexWebSocketHandler extends AbstractWebSocketHandler {
     }
 
     /**
-     * 连接关闭后
+     * 在WebSocket连接关闭后执行清理操作
      *
-     * @param session
-     * @param status
+     * @param session WebSocket会话
+     * @param status  关闭状态信息
      */
     @Override
     public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
@@ -93,9 +100,9 @@ public class FlexWebSocketHandler extends AbstractWebSocketHandler {
     }
 
     /**
-     * 是否支持分消息
+     * 指示处理程序是否支持接收部分消息
      *
-     * @return
+     * @return 如果支持接收部分消息,则返回true;否则返回false
      */
     @Override
     public boolean supportsPartialMessages() {

+ 29 - 1
eco-common/common-websocket/src/main/java/org/eco/common/websocket/holder/WebSocketSessionHolder.java

@@ -11,31 +11,59 @@ import java.util.concurrent.ConcurrentHashMap;
 /**
  * WebSocketSession 用于保存当前所有在线的会话信息
  *
- * @author zendwang
+ * @author gaokun wang
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class WebSocketSessionHolder {
 
     private static final Map<Long, WebSocketSession> USER_SESSION_MAP = new ConcurrentHashMap<>();
 
+    /**
+     * 将WebSocket会话添加到用户会话Map中
+     *
+     * @param sessionKey 会话键,用于检索会话
+     * @param session    要添加的WebSocket会话
+     */
     public static void addSession(Long sessionKey, WebSocketSession session) {
         USER_SESSION_MAP.put(sessionKey, session);
     }
 
+    /**
+     * 从用户会话Map中移除指定会话键对应的WebSocket会话
+     *
+     * @param sessionKey 要移除的会话键
+     */
     public static void removeSession(Long sessionKey) {
         if (USER_SESSION_MAP.containsKey(sessionKey)) {
             USER_SESSION_MAP.remove(sessionKey);
         }
     }
 
+    /**
+     * 根据会话键从用户会话Map中获取WebSocket会话
+     *
+     * @param sessionKey 要获取的会话键
+     * @return 与给定会话键对应的WebSocket会话,如果不存在则返回null
+     */
     public static WebSocketSession getSessions(Long sessionKey) {
         return USER_SESSION_MAP.get(sessionKey);
     }
 
+    /**
+     * 获取存储在用户会话Map中所有WebSocket会话的会话键集合
+     *
+     * @return 所有WebSocket会话的会话键集合
+     */
     public static Set<Long> getSessionsAll() {
         return USER_SESSION_MAP.keySet();
     }
 
+    /**
+     * 检查给定的会话键是否存在于用户会话Map中
+     *
+     * @param sessionKey 要检查的会话键
+     * @return 如果存在对应的会话键,则返回true;否则返回false
+     */
     public static Boolean existSession(Long sessionKey) {
         return USER_SESSION_MAP.containsKey(sessionKey);
     }

+ 27 - 12
eco-common/common-websocket/src/main/java/org/eco/common/websocket/interceptor/FlexWebSocketInterceptor.java

@@ -1,6 +1,10 @@
 package org.eco.common.websocket.interceptor;
 
+import cn.dev33.satoken.exception.NotLoginException;
+import cn.dev33.satoken.stp.StpUtil;
 import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.common.core.utils.ServletUtils;
+import org.eco.common.core.utils.StringUtils;
 import org.eco.common.security.utils.LoginHelper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.server.ServerHttpRequest;
@@ -15,34 +19,45 @@ import static org.eco.common.websocket.constant.WebSocketConstants.LOGIN_USER_KE
 /**
  * WebSocket握手请求的拦截器
  *
- * @author zendwang
+ * @author gaokun wang
  */
 @Slf4j
 public class FlexWebSocketInterceptor implements HandshakeInterceptor {
 
     /**
-     * 握手前
+     * WebSocket握手执行的前置处理方法
      *
-     * @param request    request
-     * @param response   response
-     * @param wsHandler  wsHandler
-     * @param attributes attributes
-     * @return 是否握手成功
+     * @param request    WebSocket握手请求
+     * @param response   WebSocket握手响应
+     * @param wsHandler  WebSocket处理程序
+     * @param attributes 与WebSocket会话关联的属性
+     * @return 如果允许握手继续进行,则返回true;否则返回false
      */
     @Override
     public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
         LoginUser loginUser = LoginHelper.getLoginUser();
+        // 解决 ws 不走 mvc 拦截器问题(cloud 版本不受影响)
+        // 检查 header 与 param 里的 clientid 与 token 里的是否一致
+        String headerCid = ServletUtils.getRequest().getHeader(LoginHelper.CLIENT_KEY);
+        String paramCid = ServletUtils.getParameter(LoginHelper.CLIENT_KEY);
+        String clientId = StpUtil.getExtra(LoginHelper.CLIENT_KEY).toString();
+        if (!StringUtils.equalsAny(clientId, headerCid, paramCid)) {
+            // token 无效
+            throw NotLoginException.newInstance(StpUtil.getLoginType(),
+                "-100", "客户端ID与Token不匹配",
+                StpUtil.getTokenValue());
+        }
         attributes.put(LOGIN_USER_KEY, loginUser);
         return true;
     }
 
     /**
-     * 握手后
+     * WebSocket握手成功执行的后置处理方法
      *
-     * @param request   request
-     * @param response  response
-     * @param wsHandler wsHandler
-     * @param exception 异常
+     * @param request   WebSocket握手请求
+     * @param response  WebSocket握手响应
+     * @param wsHandler WebSocket处理程序
+     * @param exception 握手过程中可能出现的异常
      */
     @Override
     public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {

+ 6 - 0
eco-common/common-websocket/src/main/java/org/eco/common/websocket/listener/WebSocketTopicListener.java

@@ -16,6 +16,12 @@ import org.springframework.core.Ordered;
 @Slf4j
 public class WebSocketTopicListener implements ApplicationRunner, Ordered {
 
+    /**
+     * 在Spring Boot应用程序启动时初始化WebSocket主题订阅监听器
+     *
+     * @param args 应用程序参数
+     * @throws Exception 初始化过程中可能抛出的异常
+     */
     @Override
     public void run(ApplicationArguments args) throws Exception {
         WebSocketUtils.subscribeMessage((message) -> {

+ 27 - 10
eco-common/common-websocket/src/main/java/org/eco/common/websocket/utils/WebSocketUtils.java

@@ -21,17 +21,17 @@ import java.util.function.Consumer;
 /**
  * 工具类
  *
- * @author zendwang
+ * @author gaokun wang
  */
 @Slf4j
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class WebSocketUtils {
 
     /**
-     * 发送消息
+     * 向指定的WebSocket会话发送消息
      *
-     * @param sessionKey session主键 一般为用户id
-     * @param message    消息文本
+     * @param sessionKey 要发送消息的用户id
+     * @param message    要发送的消息内容
      */
     public static void sendMessage(Long sessionKey, String message) {
         WebSocketSession session = WebSocketSessionHolder.getSessions(sessionKey);
@@ -39,18 +39,18 @@ public class WebSocketUtils {
     }
 
     /**
-     * 订阅消息
+     * 订阅WebSocket消息主题,并提供一个消费者函数来处理接收到的消息
      *
-     * @param consumer 自定义处理
+     * @param consumer 处理WebSocket消息的消费者函数
      */
     public static void subscribeMessage(Consumer<WebSocketMessageDto> consumer) {
         RedisUtils.subscribe(WebSocketConstants.WEB_SOCKET_TOPIC, WebSocketMessageDto.class, consumer);
     }
 
     /**
-     * 发布订阅消息
+     * 发布WebSocket订阅消息
      *
-     * @param webSocketMessage 消息对象
+     * @param webSocketMessage 要发布的WebSocket消息对象
      */
     public static void publishMessage(WebSocketMessageDto webSocketMessage) {
         List<Long> unsentSessionKeys = new ArrayList<>();
@@ -75,9 +75,9 @@ public class WebSocketUtils {
     }
 
     /**
-     * 发布订阅的消息(群发)
+     * 向所有的WebSocket会话发布订阅的消息(群发)
      *
-     * @param message 消息内容
+     * @param message 要发布的消息内容
      */
     public static void publishAll(String message) {
         WebSocketMessageDto broadcastMessage = new WebSocketMessageDto();
@@ -87,14 +87,31 @@ public class WebSocketUtils {
         });
     }
 
+    /**
+     * 向指定的WebSocket会话发送Pong消息
+     *
+     * @param session 要发送Pong消息的WebSocket会话
+     */
     public static void sendPongMessage(WebSocketSession session) {
         sendMessage(session, new PongMessage());
     }
 
+    /**
+     * 向指定的WebSocket会话发送文本消息
+     *
+     * @param session WebSocket会话
+     * @param message 要发送的文本消息内容
+     */
     public static void sendMessage(WebSocketSession session, String message) {
         sendMessage(session, new TextMessage(message));
     }
 
+    /**
+     * 向指定的WebSocket会话发送WebSocket消息对象
+     *
+     * @param session WebSocket会话
+     * @param message 要发送的WebSocket消息对象
+     */
     private static void sendMessage(WebSocketSession session, WebSocketMessage<?> message) {
         if (session == null || !session.isOpen()) {
             log.warn("[send] session会话已经关闭");

+ 8 - 9
eco-modules/system/src/main/java/org/eco/system/service/impl/SysRoleServiceImpl.java

@@ -78,7 +78,7 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole>
         left join sys_user u on u.user_id = ur.user_id
         left join sys_dept d on u.dept_id = d.dept_id*/
 
-        QueryWrapper queryWrapper = QueryWrapper.create()
+        return QueryWrapper.create()
             .select(QueryMethods.distinct(SYS_ROLE.ALL_COLUMNS))
             .from(SYS_ROLE.as("r"))
             .leftJoin(SYS_USER_ROLE).as("ur").on(SYS_USER_ROLE.ROLE_ID.eq(SYS_ROLE.ROLE_ID))
@@ -90,7 +90,6 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole>
             .and(SYS_ROLE.ROLE_KEY.like(roleBo.getRoleKey()))
             .and(SYS_ROLE.CREATE_TIME.between(roleBo.getParams().get("beginTime"), roleBo.getParams().get("endTime")))
             .orderBy(SYS_ROLE.ROLE_SORT.asc());
-        return queryWrapper;
     }
 
     /**
@@ -260,10 +259,10 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole>
      */
     @Override
     public boolean checkRoleNameUnique(SysRoleBo roleBo) {
-        Long roleId = ObjectUtil.isNull(roleBo.getRoleId()) ? -1L : roleBo.getRoleId();
+        long roleId = ObjectUtil.isNull(roleBo.getRoleId()) ? -1L : roleBo.getRoleId();
         QueryWrapper queryWrapper = query().where(SYS_ROLE.ROLE_NAME.eq(roleBo.getRoleName()));
         SysRole info = this.getOne(queryWrapper);
-        if (ObjectUtil.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) {
+        if (ObjectUtil.isNotNull(info) && info.getRoleId() != roleId) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
@@ -277,10 +276,10 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole>
      */
     @Override
     public boolean checkRoleKeyUnique(SysRoleBo roleBo) {
-        Long roleId = ObjectUtil.isNull(roleBo.getRoleId()) ? -1L : roleBo.getRoleId();
+        long roleId = ObjectUtil.isNull(roleBo.getRoleId()) ? -1L : roleBo.getRoleId();
         QueryWrapper queryWrapper = query().where(SYS_ROLE.ROLE_KEY.eq(roleBo.getRoleKey()));
         SysRole info = this.getOne(queryWrapper);
-        if (ObjectUtil.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) {
+        if (ObjectUtil.isNotNull(info) && info.getRoleId() != roleId) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
@@ -437,7 +436,7 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole>
             rm.setMenuId(menuId);
             list.add(rm);
         }
-        if (list.size() > 0) {
+        if (!list.isEmpty()) {
             inserted = roleMenuService.saveBatchWithPk(list, 100);//批量保存
         }
         return inserted;
@@ -459,7 +458,7 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole>
             rd.setDeptId(deptId);
             list.add(rd);
         }
-        if (list.size() > 0) {
+        if (!list.isEmpty()) {
             inserted = roleDeptService.saveBatchWithPk(list, 100);//批量保存
         }
         return inserted;
@@ -489,7 +488,7 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole>
 
         //逻辑删除:update sys_role set del_flag = '0' where role_id in
         return UpdateChain.of(SysRole.class)
-            .set(SysRole::getDelFlag, 0)
+            .set(SysRole::getDelFlag, 1)
             .where(SysRole::getRoleId).in(Arrays.asList(roleIds))
             .update();
     }