diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 45493d3e9..3e49ee6c9 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -23,6 +23,7 @@
ruoyi-common-oss
ruoyi-common-ratelimiter
ruoyi-common-redis
+ ruoyi-common-shortlink
ruoyi-common-satoken
ruoyi-common-security
ruoyi-common-sms
diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml
index 4a2dc1ceb..35514f768 100644
--- a/ruoyi-common/ruoyi-common-bom/pom.xml
+++ b/ruoyi-common/ruoyi-common-bom/pom.xml
@@ -96,6 +96,13 @@
${revision}
+
+
+ org.dromara
+ ruoyi-common-shortlink
+ ${revision}
+
+
org.dromara
diff --git a/ruoyi-common/ruoyi-common-shortlink/pom.xml b/ruoyi-common/ruoyi-common-shortlink/pom.xml
new file mode 100644
index 000000000..0cfac4e94
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-shortlink/pom.xml
@@ -0,0 +1,37 @@
+
+
+
+ org.dromara
+ ruoyi-common
+ ${revision}
+
+ 4.0.0
+
+ ruoyi-common-shortlink
+
+
+ ruoyi-common-shortlink 短链接模块
+
+
+
+
+
+ org.dromara
+ ruoyi-common-core
+
+
+
+ org.dromara
+ ruoyi-common-redis
+
+
+
+ org.dromara
+ ruoyi-common-mybatis
+
+
+
+
+
diff --git a/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/enums/ValidityType.java b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/enums/ValidityType.java
new file mode 100644
index 000000000..35eb45845
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/enums/ValidityType.java
@@ -0,0 +1,50 @@
+package org.dromara.common.shortlink.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 有效期
+ *
+ * @author AprilWind
+ */
+@Getter
+@AllArgsConstructor
+public enum ValidityType {
+
+ /**
+ * 三分钟
+ */
+ THREE_MINUTES(3 * 60L),
+
+ /**
+ * 一个小时
+ */
+ ONE_HOUR(60 * 60L),
+
+ /**
+ * 表示一天(24小时)
+ */
+ ONE_DAY(24 * 60 * 60L),
+
+ /**
+ * 表示三天
+ */
+ THREE_DAYS(3 * 24 * 60 * 60L),
+
+ /**
+ * 表示七天(一周)
+ */
+ SEVEN_DAYS(7 * 24 * 60 * 60L),
+
+ /**
+ * 表示三十天(一个月)
+ */
+ THIRTY_DAYS(30 * 24 * 60 * 60L);
+
+ /**
+ * 有效期(单位:秒)
+ */
+ private final Long validityType;
+
+}
diff --git a/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/properties/ShortLinkProperties.java b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/properties/ShortLinkProperties.java
new file mode 100644
index 000000000..0d96f886a
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/properties/ShortLinkProperties.java
@@ -0,0 +1,25 @@
+package org.dromara.common.shortlink.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * 短链接 配置属性
+ *
+ * @author AprilWind
+ */
+@Data
+@ConfigurationProperties(prefix = "shortlink")
+public class ShortLinkProperties {
+
+ /**
+ * 短链接主机名或域名
+ */
+ private String host;
+
+ /**
+ * 错误页面的主机名或域名
+ */
+ private String erroHost;
+
+}
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
new file mode 100644
index 000000000..dd1e0a289
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java
@@ -0,0 +1,88 @@
+package org.dromara.common.shortlink.utils;
+
+import cn.hutool.core.lang.Validator;
+import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+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.properties.ShortLinkProperties;
+
+import java.time.Duration;
+
+/**
+ * 短链接生成工具类
+ *
+ * @author AprilWind
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class ShortLinkUtils {
+
+ private static final IdentifierGenerator IDENTIFIER_GENERATOR = SpringUtils.getBean(IdentifierGenerator.class);
+ private static final ShortLinkProperties shortLinkProperties = SpringUtils.getBean(ShortLinkProperties.class);
+
+ /**
+ * 生成带有短链接主机名或域名的完整短链接
+ *
+ * @param longUrl 完整的长链接
+ * @param validityType 有效期类型枚举
+ * @return 带有短链接主机名或域名的完整短链接
+ */
+ public static String generateShortUrlHost(String longUrl, ValidityType validityType) {
+ String url = generateShortUrl(longUrl, validityType);
+ return shortLinkProperties.getHost() + 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);
+ }
+
+ /**
+ * 生成指定短链接并将长链接存储到缓存中
+ *
+ * @param shortUrl 指定的短链接标识符
+ * @param longUrl 完整的长链接
+ * @param validityType 有效期类型枚举
+ * @return 生成的指定短链接标识符
+ */
+ public static String generateShortUrl(String shortUrl, String longUrl, ValidityType validityType) {
+ Validator.validateUrl(longUrl, "请输入有效的url");
+ RedisUtils.setCacheObject(GlobalConstants.SHORT_LINK_KEY + shortUrl, longUrl, Duration.ofSeconds(validityType.getValidityType()));
+ return shortUrl;
+ }
+
+ /**
+ * 根据短链接获取对应的完整长链接,如果找不到长链接则返回错误链接
+ *
+ * @param shortUrl 短链接标识符
+ * @return 对应的完整长链接,如果未找到则返回错误链接
+ */
+ public static String getLongLink(String shortUrl) {
+ return getLongLink(shortUrl, shortLinkProperties.getErroHost());
+ }
+
+ /**
+ * 根据短链接获取对应的完整长链接,如果找不到长链接则返回指定的错误链接
+ *
+ * @param shortUrl 短链接标识符
+ * @param errUrl 错误链接
+ * @return 对应的完整长链接,如果未找到则返回错误链接
+ */
+ public static String getLongLink(String shortUrl, String errUrl) {
+ String longLink = RedisUtils.getCacheObject(GlobalConstants.SHORT_LINK_KEY + shortUrl);
+ return StringUtils.isNotEmpty(longLink) ? longLink : errUrl;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-shortlink/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-shortlink/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 000000000..aa57e7f93
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-shortlink/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+org.dromara.common.shortlink.properties.ShortLinkProperties