当前位置: 首页 > news >正文

长链接转短链接,短链接跳转对应页面

生成长链接对应的值,将其作为key,长链接作为value保存到redis中,然后设计一个接口,根据key从redis中获取长链接,通过重定向访问长链接对应的页面

引入pom依赖

 		<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12</version></dependency> 

生成短链接的工具类

/*** @Author ybl* @Date 2023/9/25 15:34* @Description 1、将长网址 md5 生成 32 位签名串,分为 4 段, 每段 8 个字节* 2、对这四段循环处理, 取 8 个字节, 将他看成 16 进制串与 0x3fffffff(30位1) 与操作, 即超过 30 位的忽略处理* 3、这 30 位分成 6 段, 每 5 位的数字作为字母表的索引取得特定字符, 依次进行获得 6 位字符串* 4、总的 md5 串可以获得 4 个 6 位串,取里面的任意一个就可作为这个长 url 的短 url 地址**/
public class ShortUrlUtil {public static final char[] chars = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U','V', 'W', 'X', 'Y', 'Z'};public static final String key = "135796";/*** 生成短链的id* @param url 地址* @param num 需要生成的短链id的个数* @return 数组* **/public static String[] shortUrl(String url,int num) {String sMD5EncryptResult = DigestUtils.md5Hex(key + url);String hex = sMD5EncryptResult;String[] resUrl = new String[4];for (int i = 0; i < num; i++) {long lHexLong = 0x3FFFFFFF & Long.parseLong(hex.substring(i * 8, i * 8 + 8), 16);StringBuilder outChars = new StringBuilder();for (int j = 0; j < 6; j++) {long index = 0x0000003D & lHexLong;outChars.append(chars[(int) index]);lHexLong >>= 5;}resUrl[i] = outChars.toString();}return resUrl;}
}

长链接生成短链接

以访问某一类详情页面的url生成短链接为例

@Autowiredprivate RedisCache redisCache;/*** 拼接长连接获取对应的短连接* @param urlPrefix 访问地址的前缀* @param detailId 详情的id* @return 短链地址* **/public String getShortUrl(String urlPrefix,String detailId){String detailUrl  = "http://XXXX.com/detail?detailId=" + detailId;String[] shortUrlId = ShortUrlUtil.shortUrl(detailUrl, 1);redisCache.setCacheObject(shortUrlId[0],detailUrl);String shortUrl = urlPrefix + "/short/" + shortUrlId[0];return shortUrl;}

通过短链接访问长链接

@RestController
@RequestMapping("/short")
public class ShortUrlController {@Autowiredprivate RedisCache redisCache;@GetMapping("/{id}")public RedirectView getUrl(@PathVariable String id){return new RedirectView(redisCache.getCacheObject(id));}
}
http://www.xdnf.cn/news/832321.html

相关文章:

  • 什么是IT咨询?IT外包又是什么?
  • LIBSVM入门
  • 详解IP安全:IPSec协议簇 - AH协议 - ESP协议 - IKE协议
  • dhtml是基于html的一门语言,什么是DHTML
  • 【ISP】颜色的理解
  • Matlab中利用findpeaks找波峰和波谷
  • 招生|清华大学天基网络与通信全国重点实验室
  • 约束条件(constraint)
  • 基于javaweb+mysql的springboot物业管理系统(java+springboot+maven+ssm+thymeleaf+html+jquery+mysql)
  • win11检测工具在哪 win11检测工具位置介绍
  • c盘fakepath是什么意思_C盘越用越大?告诉你什么文件可以删!
  • SVN客户端(Windows)——Tortoise SVN(中文版 )的下载及安装
  • 【网页设计期末大作业源代码】使用HTML5+CSS3+JavaScript十分钟快速制作一个简约大气设计类静态网站|自适应响应式|自制超简单的美术公司网页|直接可以修改使用|适合新手超友好易上手新手必
  • 如何清理电脑浏览器缓存,4款常用浏览器清理缓存的方法
  • 搜索引擎的网站登录入口
  • 新手入门C语言
  • SPSS是什么?
  • 17 VRRP基础(虚拟路由器冗余协议)
  • 计算机网络技术专业,热门就业方向和就业前景
  • 什么是对象数组
  • UFT使用技巧
  • SqlCommand的三种方法以及封装SqlHelper类
  • “String.h” 源代码总结
  • 什么是Symbian
  • Windows修改默认路由(Default Gateway)
  • sleep、usleep、nanosleep函数
  • CAXA3D实体设计2023安装教程(非常详细)从零基础入门到精通,看完这一篇就够了_caxa2023(2)
  • maya2016到2022在线文档地址分享
  • latin1详解
  • 项目需求分析5大常见问题及解决方案