From dd04aa4e7f4c83e884c9faa3c27efe074b5d37ba Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Thu, 11 Apr 2024 18:14:06 +0800 Subject: [PATCH 1/9] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=E7=9F=AD=E9=93=BE?= =?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 --- .../src/main/resources/application-dev.yml | 2 + .../src/main/resources/application.yml | 1 + .../common/core/constant/GlobalConstants.java | 6 ++ .../system/SysShortLinkController.java | 65 +++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysShortLinkController.java diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 1cb3ea684..5b88a71ad 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -194,6 +194,8 @@ sms: signature: 您的短信签名 sdk-app-id: 您的sdkAppId +short: + host: http://localhost/dev-api/resource/short/link?shortUrl= --- # 三方授权 justauth: diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index ad50248bc..5c3ecffbd 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -126,6 +126,7 @@ security: # EasyRetry Job 分派 @see com.aizuda.easy.retry.client.job.core.client.JobEndPoint - /job/dispatch/v1 - /job/stop/v1 + - /resource/short/link # 多租户配置 tenant: diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java index ae9bc2e62..10fe478be 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java @@ -36,4 +36,10 @@ public interface GlobalConstants { * 三方认证 redis key */ String SOCIAL_AUTH_CODE_KEY = GLOBAL_REDIS_KEY + "social_auth_codes:"; + + /** + * 短链接 redis key + */ + String SHORT_LINK_KEY = GLOBAL_REDIS_KEY + "short_link:"; + } 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 new file mode 100644 index 000000000..d1c1ab3d7 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysShortLinkController.java @@ -0,0 +1,65 @@ +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.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +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; + +/** + * 短链接 控制层 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/resource/short") +public class SysShortLinkController { + private final IdentifierGenerator identifierGenerator; + + /** + * 根据短链接获取长链接并重定向 + * + * @param shortUrl 短链接 + * @return 重定向视图 + */ + @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"); + } + + /** + * 生成短链接并返回 + * + * @param longUrl 长链接 + * @return 完整的短链接 + */ + @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; + } + +} From 6acc6587c10fd9784ab99978bb98fe48ddbc1619 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 12 Apr 2024 11:06:12 +0800 Subject: [PATCH 2/9] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=E7=9F=AD=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-common/pom.xml | 1 + ruoyi-common/ruoyi-common-bom/pom.xml | 7 ++ ruoyi-common/ruoyi-common-shortlink/pom.xml | 37 ++++++++ .../common/shortlink/enums/ValidityType.java | 50 +++++++++++ .../properties/ShortLinkProperties.java | 25 ++++++ .../shortlink/utils/ShortLinkUtils.java | 88 +++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + 7 files changed, 209 insertions(+) create mode 100644 ruoyi-common/ruoyi-common-shortlink/pom.xml create mode 100644 ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/enums/ValidityType.java create mode 100644 ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/properties/ShortLinkProperties.java create mode 100644 ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java create mode 100644 ruoyi-common/ruoyi-common-shortlink/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 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 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 3/9] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E7=9F=AD?= =?UTF-8?q?=E8=BF=9E=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); } } From 1e8264a30f59dae65016392d8252e0c87bb2effb Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 12 Apr 2024 13:42:17 +0800 Subject: [PATCH 4/9] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E7=9F=AD?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E7=94=9F=E6=88=90=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-dev.yml | 6 ++++-- .../shortlink/properties/ShortLinkProperties.java | 9 +++++++-- .../dromara/common/shortlink/utils/ShortLinkUtils.java | 10 +++++----- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 5b88a71ad..4d50f61c5 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -194,8 +194,10 @@ sms: signature: 您的短信签名 sdk-app-id: 您的sdkAppId -short: - host: http://localhost/dev-api/resource/short/link?shortUrl= +shortlink: + enabled: false + address: http://localhost/dev-api/resource/short/link?shortUrl= + errorAddress: http://localhost/error --- # 三方授权 justauth: 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 index 0d96f886a..de618b337 100644 --- 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 @@ -12,14 +12,19 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "shortlink") public class ShortLinkProperties { + /** + * 客户端使用租户域名生成链接 + */ + private Boolean enabled = false; + /** * 短链接主机名或域名 */ - private String host; + private String address; /** * 错误页面的主机名或域名 */ - private String erroHost; + private String errorAddress="/error"; } 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 7c31a5fd4..d3850939d 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 @@ -32,20 +32,20 @@ public class ShortLinkUtils { * @return 带有默认主机名(或域名)的完整短链接 */ public static String generateShortUrl(String longUrl, ValidityType validityType) { - return generateShortUrl(SHORT_LINK_PROPERTIES.getHost(), longUrl, validityType); + return generateShortUrl(SHORT_LINK_PROPERTIES.getAddress(), longUrl, validityType); } /** * 根据指定主机名(或域名)生成完整短链接 * - * @param host 主机名(或域名) + * @param address 主机名(或域名) * @param longUrl 完整的长链接 * @param validityType 有效期类型枚举 * @return 带有指定主机名(或域名)的完整短链接 */ - public static String generateShortUrl(String host, String longUrl, ValidityType validityType) { + public static String generateShortUrl(String address, String longUrl, ValidityType validityType) { String url = generateShortLinkIdentifier(longUrl, validityType); - return host + url; + return address + url; } /** @@ -82,7 +82,7 @@ public class ShortLinkUtils { * @return 对应的完整长链接,如果未找到则返回错误链接 */ public static String getLongLink(String shortUrl) { - return getLongLink(shortUrl, SHORT_LINK_PROPERTIES.getErroHost()); + return getLongLink(shortUrl, SHORT_LINK_PROPERTIES.getErrorAddress()); } /** From a06570f39c6ea6d98cf950f5a00234ae89a9c761 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 12 Apr 2024 13:44:10 +0800 Subject: [PATCH 5/9] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E7=9F=AD?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E9=9D=9E=E7=A7=9F=E6=88=B7=E5=9F=9F=E5=90=8D?= =?UTF-8?q?=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/SysShortLinkController.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) 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 59edcd28f..a7a88b4b2 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,8 +1,11 @@ package org.dromara.system.controller.system; +import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; import org.dromara.common.shortlink.enums.ValidityType; +import org.dromara.common.shortlink.properties.ShortLinkProperties; import org.dromara.common.shortlink.utils.ShortLinkUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -20,6 +23,8 @@ import org.springframework.web.servlet.view.RedirectView; @RequestMapping("/resource/short") public class SysShortLinkController { + private final ShortLinkProperties shortLinkProperties; + /** * 根据短链接获取长链接并重定向 * @@ -28,7 +33,7 @@ public class SysShortLinkController { */ @GetMapping("/link") public RedirectView getLongLink(@NotBlank(message = "参数不能为空") String shortUrl) { - String longLink = ShortLinkUtils.getLongLink(shortUrl, "/error"); + String longLink = ShortLinkUtils.getLongLink(shortUrl, shortLinkProperties.getErrorAddress()); return new RedirectView(longLink); } @@ -39,8 +44,16 @@ public class SysShortLinkController { * @return 完整的短链接 */ @PostMapping("/shorturl") - public String generateShortUrl(@NotBlank(message = "参数不能为空") String longUrl) { - return ShortLinkUtils.generateShortUrl(longUrl, ValidityType.THREE_DAYS); + public R generateShortUrl(HttpServletRequest request, @NotBlank(message = "参数不能为空") String longUrl) { + String shorturl; + if (Boolean.FALSE.equals(shortLinkProperties.getEnabled())) { + shorturl = ShortLinkUtils.generateShortUrl(shortLinkProperties.getAddress(), longUrl, ValidityType.THREE_DAYS); + } else { + StringBuffer requestURL = request.getRequestURL(); + String address = requestURL.substring(0, requestURL.indexOf("shorturl")) + "link?shortUrl="; + shorturl = ShortLinkUtils.generateShortUrl(address, longUrl, ValidityType.THREE_DAYS); + } + return R.ok(shorturl); } } From 1bc60fbc4bca71cd3fcce92e3450eba84dc26ece Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 12 Apr 2024 13:45:04 +0800 Subject: [PATCH 6/9] =?UTF-8?q?update=20OSS=E4=B8=B4=E6=97=B6URL=E8=BF=87?= =?UTF-8?q?=E9=95=BF=EF=BC=8C=E7=94=9F=E6=88=90=E7=9F=AD=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/system/service/impl/SysOssServiceImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java index 1df221c32..415cbc4e8 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java @@ -22,6 +22,8 @@ import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.enumd.AccessPolicyType; import org.dromara.common.oss.factory.OssFactory; +import org.dromara.common.shortlink.enums.ValidityType; +import org.dromara.common.shortlink.utils.ShortLinkUtils; import org.dromara.system.domain.SysOss; import org.dromara.system.domain.bo.SysOssBo; import org.dromara.system.domain.vo.SysOssVo; @@ -238,16 +240,17 @@ public class SysOssServiceImpl implements ISysOssService, OssService { } /** - * 桶类型为 private 的URL 修改为临时URL时长为120s + * 桶类型为 private 的URL 修改为临时URL时长为180s * * @param oss OSS对象 * @return oss 匹配Url的OSS对象 */ private SysOssVo matchingUrl(SysOssVo oss) { OssClient storage = OssFactory.instance(oss.getService()); - // 仅修改桶类型为 private 的URL,临时URL时长为120s + // 仅修改桶类型为 private 的URL,临时URL时长为180s if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) { - oss.setUrl(storage.getPrivateUrl(oss.getFileName(), 120)); + String privateUrl = storage.getPrivateUrl(oss.getFileName(), 180); + oss.setUrl(ShortLinkUtils.generateShortUrl(privateUrl, ValidityType.THREE_MINUTES)); } return oss; } From bf6102cf64c161877e5a71ea9241048ad81f0332 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 12 Apr 2024 14:16:28 +0800 Subject: [PATCH 7/9] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9F=AD=E9=93=BE=E6=8E=A5=E7=A7=9F=E6=88=B7=E5=9F=9F?= =?UTF-8?q?=E5=90=8D=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-dev.yml | 3 ++- .../shortlink/properties/ShortLinkProperties.java | 5 +++++ .../controller/system/SysShortLinkController.java | 12 +++++++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 4d50f61c5..e0c3e2013 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -195,7 +195,8 @@ sms: sdk-app-id: 您的sdkAppId shortlink: - enabled: false + enabled: true + api: /dev-api address: http://localhost/dev-api/resource/short/link?shortUrl= errorAddress: http://localhost/error 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 index de618b337..bb6cc5c47 100644 --- 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 @@ -17,6 +17,11 @@ public class ShortLinkProperties { */ private Boolean enabled = false; + /** + * 访问前缀 (开启时启用,可不填写,能访问到后端即可) + */ + private String api; + /** * 短链接主机名或域名 */ 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 a7a88b4b2..37af72876 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 @@ -14,6 +14,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.view.RedirectView; +import java.net.MalformedURLException; +import java.net.URL; + /** * 短链接 控制层 */ @@ -44,13 +47,16 @@ public class SysShortLinkController { * @return 完整的短链接 */ @PostMapping("/shorturl") - public R generateShortUrl(HttpServletRequest request, @NotBlank(message = "参数不能为空") String longUrl) { + public R generateShortUrl(HttpServletRequest request, @NotBlank(message = "参数不能为空") String longUrl) throws MalformedURLException { String shorturl; if (Boolean.FALSE.equals(shortLinkProperties.getEnabled())) { shorturl = ShortLinkUtils.generateShortUrl(shortLinkProperties.getAddress(), longUrl, ValidityType.THREE_DAYS); } else { - StringBuffer requestURL = request.getRequestURL(); - String address = requestURL.substring(0, requestURL.indexOf("shorturl")) + "link?shortUrl="; + String requestUrl = request.getRequestURL().toString(); + String host = new URL(requestUrl).getHost(); + String address = requestUrl + .replace(host, host + shortLinkProperties.getApi()) + .replace("shorturl", "link?shortUrl="); shorturl = ShortLinkUtils.generateShortUrl(address, longUrl, ValidityType.THREE_DAYS); } return R.ok(shorturl); From df6641a659f3c1b501a648e31cd9ea7a549e28fd Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 12 Apr 2024 14:44:08 +0800 Subject: [PATCH 8/9] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9F=AD=E9=93=BE=E6=8E=A5=E6=A0=87=E8=AF=86=E7=AC=A6?= =?UTF-8?q?=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 2 +- .../src/main/resources/application.yml | 2 +- .../properties/ShortLinkProperties.java | 2 +- .../shortlink/utils/ShortLinkUtils.java | 12 ++++++------ .../system/SysShortLinkController.java | 19 +++++++------------ 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index e0c3e2013..350557f9c 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -195,7 +195,7 @@ sms: sdk-app-id: 您的sdkAppId shortlink: - enabled: true + enabled: false api: /dev-api address: http://localhost/dev-api/resource/short/link?shortUrl= errorAddress: http://localhost/error diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 5c3ecffbd..076434e69 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -126,7 +126,7 @@ security: # EasyRetry Job 分派 @see com.aizuda.easy.retry.client.job.core.client.JobEndPoint - /job/dispatch/v1 - /job/stop/v1 - - /resource/short/link + - /resource/short/link/* # 多租户配置 tenant: 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 index bb6cc5c47..12eae1576 100644 --- 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 @@ -30,6 +30,6 @@ public class ShortLinkProperties { /** * 错误页面的主机名或域名 */ - private String errorAddress="/error"; + private String errorAddress = "/error"; } 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 d3850939d..a2ed362c4 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 @@ -78,22 +78,22 @@ public class ShortLinkUtils { /** * 根据短链接获取对应的完整长链接,如果找不到长链接则返回错误链接 * - * @param shortUrl 短链接标识符 + * @param shortLinkIdentifier 短链接标识符 * @return 对应的完整长链接,如果未找到则返回错误链接 */ - public static String getLongLink(String shortUrl) { - return getLongLink(shortUrl, SHORT_LINK_PROPERTIES.getErrorAddress()); + public static String getLongLink(String shortLinkIdentifier) { + return getLongLink(shortLinkIdentifier, SHORT_LINK_PROPERTIES.getErrorAddress()); } /** * 根据短链接获取对应的完整长链接,如果找不到长链接则返回指定的错误链接 * - * @param shortUrl 短链接标识符 + * @param shortLinkIdentifier 短链接标识符 * @param errUrl 错误链接 * @return 对应的完整长链接,如果未找到则返回错误链接 */ - public static String getLongLink(String shortUrl, String errUrl) { - String longLink = RedisUtils.getCacheObject(GlobalConstants.SHORT_LINK_KEY + shortUrl); + public static String getLongLink(String shortLinkIdentifier, String errUrl) { + String longLink = RedisUtils.getCacheObject(GlobalConstants.SHORT_LINK_KEY + shortLinkIdentifier); return StringUtils.isNotEmpty(longLink) ? longLink : errUrl; } 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 37af72876..3e16125d2 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 @@ -8,10 +8,7 @@ import org.dromara.common.shortlink.enums.ValidityType; import org.dromara.common.shortlink.properties.ShortLinkProperties; 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; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.view.RedirectView; import java.net.MalformedURLException; @@ -31,12 +28,12 @@ public class SysShortLinkController { /** * 根据短链接获取长链接并重定向 * - * @param shortUrl 短链接 + * @param shortLinkIdentifier 短链接标识符 * @return 重定向视图 */ - @GetMapping("/link") - public RedirectView getLongLink(@NotBlank(message = "参数不能为空") String shortUrl) { - String longLink = ShortLinkUtils.getLongLink(shortUrl, shortLinkProperties.getErrorAddress()); + @GetMapping("/link/{shortLinkIdentifier}") + public RedirectView getLongLink(@PathVariable("shortLinkIdentifier") String shortLinkIdentifier) { + String longLink = ShortLinkUtils.getLongLink(shortLinkIdentifier, shortLinkProperties.getErrorAddress()); return new RedirectView(longLink); } @@ -52,11 +49,9 @@ public class SysShortLinkController { if (Boolean.FALSE.equals(shortLinkProperties.getEnabled())) { shorturl = ShortLinkUtils.generateShortUrl(shortLinkProperties.getAddress(), longUrl, ValidityType.THREE_DAYS); } else { - String requestUrl = request.getRequestURL().toString(); + String requestUrl = request.getRequestURL().toString().replace("shorturl", "link/"); String host = new URL(requestUrl).getHost(); - String address = requestUrl - .replace(host, host + shortLinkProperties.getApi()) - .replace("shorturl", "link?shortUrl="); + String address = requestUrl.replace(host, host + shortLinkProperties.getApi()); shorturl = ShortLinkUtils.generateShortUrl(address, longUrl, ValidityType.THREE_DAYS); } return R.ok(shorturl); From ec6f28296f039be465c57227cd8256cc0f1418bc Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 12 Apr 2024 15:46:49 +0800 Subject: [PATCH 9/9] =?UTF-8?q?update=20yaml=E7=9F=AD=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-dev.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 350557f9c..ca7e7a116 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -194,11 +194,16 @@ sms: signature: 您的短信签名 sdk-app-id: 您的sdkAppId +--- # 短链接 shortlink: + # 是否启用租户域名生成 enabled: false + # 访问前缀 api: /dev-api - address: http://localhost/dev-api/resource/short/link?shortUrl= - errorAddress: http://localhost/error + # 域名或主机名 + address: http://localhost/dev-api/resource/short/link/ + # 错误页面 + errorAddress: /error --- # 三方授权 justauth: