Просмотр исходного кода

飞书免授权链接设置有效期

xw 1 день назад
Родитель
Сommit
8ec4cfb883

+ 36 - 0
fs-service/src/main/java/com/fs/feishu/service/FeiShuService.java

@@ -22,6 +22,7 @@ import org.springframework.stereotype.Component;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -93,6 +94,38 @@ public class FeiShuService {
         return isAuthRequired(link.getFeishuNeedAuth());
     }
 
+    /**
+     * 短链是否已过有效期(fs_course_link.update_time,通常为发课日当天 23:59:59)。
+     */
+    public static boolean isCourseLinkExpired(FsCourseLink link) {
+        if (link == null || link.getUpdateTime() == null) {
+            return false;
+        }
+        return new Date().after(link.getUpdateTime());
+    }
+
+    /**
+     * 校验飞书 SOP 免授权短链:存在、免授权、未过期。
+     *
+     * @return null 表示通过,否则为错误信息
+     */
+    public String validateNoAuthCourseLink(String linkCode) {
+        if (StringUtils.isBlank(linkCode)) {
+            return "link不能为空";
+        }
+        FsCourseLink link = courseLinkMapper.selectFsCourseLinkByLink(linkCode);
+        if (link == null) {
+            return "链接已过期";
+        }
+        if (isAuthRequired(link.getFeishuNeedAuth())) {
+            return "该链接需要授权,请走授权看课流程";
+        }
+        if (isCourseLinkExpired(link)) {
+            return "链接已过期";
+        }
+        return null;
+    }
+
     /**
      * 生成飞书免授权看课链接(发课时直接嵌入播放页 iframe 文档)。
      */
@@ -322,6 +355,9 @@ public class FeiShuService {
         if (fsCourseLink == null) {
             throw new CustomException("课程链接已过期");
         }
+        if (isCourseLinkExpired(fsCourseLink)) {
+            throw new CustomException("链接已过期");
+        }
         return fsCourseLink;
     }
 

+ 3 - 5
fs-user-app/src/main/java/com/fs/app/controller/course/CourseQwController.java

@@ -365,11 +365,9 @@ public class CourseQwController extends AppBaseController {
         if (StringUtils.isBlank(token)) {
             return R.error("token不能为空");
         }
-        if (StringUtils.isBlank(link)) {
-            return R.error("link不能为空");
-        }
-        if (feiShuService.isWatchDataEnabled(link)) {
-            return R.error("该链接需要授权,请走授权看课流程");
+        String linkError = feiShuService.validateNoAuthCourseLink(link);
+        if (linkError != null) {
+            return R.error(linkError);
         }
         try {
             Map<String, Object> tokenParams = SecureTokenUtil.parseToken(token);