瀏覽代碼

update 优化 sse 拦截网络中断io异常

疯狂的狮子Li 8 月之前
父節點
當前提交
615ad918ca

+ 0 - 6
ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java

@@ -1,6 +1,5 @@
 package org.dromara.common.sse.core;
 
-import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.redis.utils.RedisUtils;
@@ -72,11 +71,6 @@ public class SseEmitterManager {
         if (emitters != null) {
             for (Map.Entry<String, SseEmitter> entry : emitters.entrySet()) {
                 try {
-                    // token 无效或已过期
-                    if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(entry.getKey()) < -1) {
-                        emitters.remove(entry.getKey());
-                        continue;
-                    }
                     entry.getValue().send(SseEmitter.event()
                         .name("message")
                         .data(message));

+ 17 - 0
ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java

@@ -16,10 +16,13 @@ import org.springframework.web.HttpRequestMethodNotSupportedException;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.MissingPathVariableException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
 import org.springframework.web.servlet.NoHandlerFoundException;
 
+import java.io.IOException;
+
 /**
  * 全局异常处理器
  *
@@ -89,6 +92,20 @@ public class GlobalExceptionHandler {
         return R.fail(HttpStatus.HTTP_NOT_FOUND, e.getMessage());
     }
 
+    /**
+     * 拦截未知的运行时异常
+     */
+    @ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
+    @ExceptionHandler(IOException.class)
+    public void handleRuntimeException(IOException e, HttpServletRequest request) {
+        String requestURI = request.getRequestURI();
+        if (requestURI.contains("sse")) {
+            // sse 经常性连接中断 例如关闭浏览器 直接屏蔽
+            return;
+        }
+        log.error("请求地址'{}',连接中断", requestURI, e);
+    }
+
     /**
      * 拦截未知的运行时异常
      */