From ddc78eb548d47d82f99dccb862be7fea4227c4ec Mon Sep 17 00:00:00 2001
From: AprilWind <2100166581@qq.com>
Date: Fri, 12 Apr 2024 11:23:28 +0800
Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E7=9F=AD=E8=BF=9E?=
=?UTF-8?q?=E6=8E=A5=E9=87=8D=E5=AE=9A=E5=90=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../shortlink/utils/ShortLinkUtils.java | 50 ++++++++++++-------
ruoyi-modules/ruoyi-system/pom.xml | 6 +++
.../system/SysShortLinkController.java | 29 ++---------
3 files changed, 42 insertions(+), 43 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java
index dd1e0a289..7c31a5fd4 100644
--- a/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java
+++ b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java
@@ -22,45 +22,57 @@ import java.time.Duration;
public class ShortLinkUtils {
private static final IdentifierGenerator IDENTIFIER_GENERATOR = SpringUtils.getBean(IdentifierGenerator.class);
- private static final ShortLinkProperties shortLinkProperties = SpringUtils.getBean(ShortLinkProperties.class);
+ private static final ShortLinkProperties SHORT_LINK_PROPERTIES = SpringUtils.getBean(ShortLinkProperties.class);
/**
- * 生成带有短链接主机名或域名的完整短链接
+ * 根据默认主机名(或域名)生成完整短链接
*
* @param longUrl 完整的长链接
* @param validityType 有效期类型枚举
- * @return 带有短链接主机名或域名的完整短链接
+ * @return 带有默认主机名(或域名)的完整短链接
*/
- public static String generateShortUrlHost(String longUrl, ValidityType validityType) {
- String url = generateShortUrl(longUrl, validityType);
- return shortLinkProperties.getHost() + url;
+ public static String generateShortUrl(String longUrl, ValidityType validityType) {
+ return generateShortUrl(SHORT_LINK_PROPERTIES.getHost(), longUrl, validityType);
}
/**
- * 生成短链接并将长链接存储到缓存中
+ * 根据指定主机名(或域名)生成完整短链接
*
+ * @param host 主机名(或域名)
* @param longUrl 完整的长链接
* @param validityType 有效期类型枚举
+ * @return 带有指定主机名(或域名)的完整短链接
+ */
+ public static String generateShortUrl(String host, String longUrl, ValidityType validityType) {
+ String url = generateShortLinkIdentifier(longUrl, validityType);
+ return host + url;
+ }
+
+ /**
+ * 生成短链接标识符并将长链接存储到缓存中
+ *
+ * @param longUrl 完整的长链接
+ * @param validityType 有效期类型枚举
* @return 生成的短链接标识符
*/
- public static String generateShortUrl(String longUrl, ValidityType validityType) {
- // 使用标识符生成器生成短链接
- String shortUrl = IDENTIFIER_GENERATOR.nextId(null).toString();
- return generateShortUrl(shortUrl, longUrl, validityType);
+ public static String generateShortLinkIdentifier(String longUrl, ValidityType validityType) {
+ // 使用标识符生成器生成短链接标识符
+ String shortLinkIdentifier = IDENTIFIER_GENERATOR.nextId(null).toString();
+ return generateShortLinkIdentifier(shortLinkIdentifier, longUrl, validityType);
}
/**
- * 生成指定短链接并将长链接存储到缓存中
+ * 生成指定短链接标识符并将长链接存储到缓存中
*
- * @param shortUrl 指定的短链接标识符
- * @param longUrl 完整的长链接
- * @param validityType 有效期类型枚举
+ * @param shortLinkIdentifier 指定的短链接标识符
+ * @param longUrl 完整的长链接
+ * @param validityType 有效期类型枚举
* @return 生成的指定短链接标识符
*/
- public static String generateShortUrl(String shortUrl, String longUrl, ValidityType validityType) {
+ public static String generateShortLinkIdentifier(String shortLinkIdentifier, String longUrl, ValidityType validityType) {
Validator.validateUrl(longUrl, "请输入有效的url");
- RedisUtils.setCacheObject(GlobalConstants.SHORT_LINK_KEY + shortUrl, longUrl, Duration.ofSeconds(validityType.getValidityType()));
- return shortUrl;
+ RedisUtils.setCacheObject(GlobalConstants.SHORT_LINK_KEY + shortLinkIdentifier, longUrl, Duration.ofSeconds(validityType.getValidityType()));
+ return shortLinkIdentifier;
}
/**
@@ -70,7 +82,7 @@ public class ShortLinkUtils {
* @return 对应的完整长链接,如果未找到则返回错误链接
*/
public static String getLongLink(String shortUrl) {
- return getLongLink(shortUrl, shortLinkProperties.getErroHost());
+ return getLongLink(shortUrl, SHORT_LINK_PROPERTIES.getErroHost());
}
/**
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index acf33ceb3..536ee63a6 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/ruoyi-modules/ruoyi-system/pom.xml
@@ -43,6 +43,12 @@
ruoyi-common-oss
+
+
+ org.dromara
+ ruoyi-common-shortlink
+
+
org.dromara
ruoyi-common-log
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysShortLinkController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysShortLinkController.java
index d1c1ab3d7..59edcd28f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysShortLinkController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysShortLinkController.java
@@ -1,12 +1,9 @@
package org.dromara.system.controller.system;
-import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
-import org.dromara.common.core.constant.GlobalConstants;
-import org.dromara.common.core.utils.SpringUtils;
-import org.dromara.common.core.utils.StringUtils;
-import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.common.shortlink.enums.ValidityType;
+import org.dromara.common.shortlink.utils.ShortLinkUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -14,8 +11,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.view.RedirectView;
-import java.time.Duration;
-
/**
* 短链接 控制层
*/
@@ -24,7 +19,6 @@ import java.time.Duration;
@RestController
@RequestMapping("/resource/short")
public class SysShortLinkController {
- private final IdentifierGenerator identifierGenerator;
/**
* 根据短链接获取长链接并重定向
@@ -34,14 +28,8 @@ public class SysShortLinkController {
*/
@GetMapping("/link")
public RedirectView getLongLink(@NotBlank(message = "参数不能为空") String shortUrl) {
- // 从 Redis 获取长链接
- String longLink = RedisUtils.getCacheObject(GlobalConstants.SHORT_LINK_KEY + shortUrl);
- if (StringUtils.isNotEmpty(longLink)) {
- // 如果长链接存在,则重定向到长链接
- return new RedirectView(longLink);
- }
- // 如果长链接不存在,则重定向到错误页面
- return new RedirectView("/error");
+ String longLink = ShortLinkUtils.getLongLink(shortUrl, "/error");
+ return new RedirectView(longLink);
}
/**
@@ -52,14 +40,7 @@ public class SysShortLinkController {
*/
@PostMapping("/shorturl")
public String generateShortUrl(@NotBlank(message = "参数不能为空") String longUrl) {
- // 使用标识符生成器生成短链接
- String shortUrl = identifierGenerator.nextId(null).toString();
- // 将短链接与长链接的映射关系存储到 Redis 中,并设置过期时间为 3 分钟
- RedisUtils.setCacheObject(GlobalConstants.SHORT_LINK_KEY + shortUrl, longUrl, Duration.ofMinutes(3));
- // 获取短链接的域名部分
- String host = SpringUtils.getProperty("short.host");
- // 拼接完整的短链接并返回
- return host + shortUrl;
+ return ShortLinkUtils.generateShortUrl(longUrl, ValidityType.THREE_DAYS);
}
}