From 7dfe30728db22ed1c21fb161af28a79ec2dcb530 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Mon, 1 Nov 2021 21:34:08 +0800 Subject: [PATCH] =?UTF-8?q?:bulb:=20=E6=AF=8F=E6=99=9A=E5=87=8C=E6=99=A812?= =?UTF-8?q?=E7=82=B9=E8=87=AA=E5=8A=A8=E6=A3=80=E6=9F=A5=E5=8F=8B=E8=81=94?= =?UTF-8?q?=EF=BC=8C=E5=AF=B9=E4=BA=8E=E7=A7=81=E8=87=AA=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E5=8F=8B=E8=81=94=E7=9A=84=E7=BD=91=E7=AB=99=E5=AE=9E=E8=A1=8C?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=B0=81=E7=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blog/core/schedule/FriendlyLinkTask.java | 78 +++++++++++++++++++ .../src/main/resources/application-dev.yml | 4 + docs/docker/.env | 4 + 3 files changed, 86 insertions(+) create mode 100644 blog-admin/src/main/java/com/zyd/blog/core/schedule/FriendlyLinkTask.java diff --git a/blog-admin/src/main/java/com/zyd/blog/core/schedule/FriendlyLinkTask.java b/blog-admin/src/main/java/com/zyd/blog/core/schedule/FriendlyLinkTask.java new file mode 100644 index 0000000..c0dc53f --- /dev/null +++ b/blog-admin/src/main/java/com/zyd/blog/core/schedule/FriendlyLinkTask.java @@ -0,0 +1,78 @@ +package com.zyd.blog.core.schedule; + +import com.zyd.blog.business.entity.Link; +import com.zyd.blog.business.enums.ConfigKeyEnum; +import com.zyd.blog.business.service.SysConfigService; +import com.zyd.blog.business.service.SysLinkService; +import com.zyd.blog.business.util.LinksUtil; +import com.zyd.blog.persistence.beans.SysConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0.0 + * @since 1.0.0 + */ +@Slf4j +@Component +public class FriendlyLinkTask { + + @Autowired + private SysLinkService sysLinkService; + @Autowired + private SysConfigService sysConfigService; + @Value("${app.enableAutoCheckLink}") + private boolean enableAutoCheckLink; + + /** + * 每晚凌晨12点,检查友情链接 + */ + @Scheduled(cron = "0 0 0 * * ?") + public void check() { + // 未开启自动检查友联的功能 + if (!enableAutoCheckLink) { + return; + } + List linkList = sysLinkService.listAll(); + if (CollectionUtils.isEmpty(linkList)) { + return; + } + SysConfig sysConfig = sysConfigService.getByKey(ConfigKeyEnum.DOMAIN.getKey()); + if (StringUtils.isEmpty(sysConfig)) { + return; + } + String domain = sysConfig.getConfigValue(); + for (Link link : linkList) { + if (!link.isStatus()) { + // 被禁用的网站如果又包含了本站链接,说明其已经恢复本站的友联 + // 因此自动恢复其友联 + if (LinksUtil.hasLinkByHtml(link.getUrl(), domain) + || LinksUtil.hasLinkByChinaz(link.getUrl(), domain)) { + link.setStatus(true); + link.setDescription(""); + sysLinkService.updateSelective(link); + } + continue; + } + + // 已经不存在本站链接,自动下架该网站的友联 + if (!(LinksUtil.hasLinkByHtml(link.getUrl(), domain)) + && !LinksUtil.hasLinkByChinaz(link.getUrl(), domain)) { + link.setStatus(false); + link.setDescription("系统检测到该网站已经取消本站的链接,因此自动封禁其友链"); + sysLinkService.updateSelective(link); + log.info("系统监测到该网站([{}])已经私自取消本站链接,因此自动下架的友联", link.getName()); + } + + } + } + +} diff --git a/blog-admin/src/main/resources/application-dev.yml b/blog-admin/src/main/resources/application-dev.yml index 11ad4ae..ff93f55 100644 --- a/blog-admin/src/main/resources/application-dev.yml +++ b/blog-admin/src/main/resources/application-dev.yml @@ -17,6 +17,10 @@ logging: app: # 是否启用kaptcha验证码 enableKaptcha: ${ONEBLOG_APP_ENABLE_KAPTCHA:false} + # 是否启用自动校验友情链接的功能 + # 请选择打开,一旦打开,每晚凌晨12点会自动检查友联,对于不包含本站链接的网站实行自动封禁 + # 目前暂时没实现白名单的功能 + enableAutoCheckLink: ${ONEBLOG_APP_ENABLE_CHECK_LINK:false} # 启用后,项目在启动时会打印数据库(Mysql和Redis)链接信息(包含密码) # 代码请参考 enabledPrintConfig: ${ONEBLOG_APP_ENABLE_PRINT_CONFIG:false} diff --git a/docs/docker/.env b/docs/docker/.env index fe65766..f7b6087 100644 --- a/docs/docker/.env +++ b/docs/docker/.env @@ -37,6 +37,10 @@ ONEBLOG_MAIL_PASSWORD= # oneblog 自定义配置 # 是否启用 kaptcha 验证码 ONEBLOG_APP_ENABLE_KAPTCHA=false +# 是否启用自动校验友情链接的功能 +# 请选择打开,一旦打开,每晚凌晨12点会自动检查友联,对于不包含本站链接的网站实行自动封禁 +# 目前暂时没实现白名单的功能 +ONEBLOG_APP_ENABLE_CHECK_LINK=false # 启用后,项目在启动时会打印数据库(Mysql和Redis)链接信息(包含密码) ONEBLOG_APP_ENABLE_PRINT_CONFIG=true # 是否启用 redis 切面缓存。 -- GitLab