springboot实现长链接转短链接
生活随笔
收集整理的這篇文章主要介紹了
springboot实现长链接转短链接
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
自己編寫長(zhǎng)鏈接轉(zhuǎn)短鏈接
原理:將長(zhǎng)鏈接在后臺(tái)通過(guò)轉(zhuǎn)換的方式轉(zhuǎn)成所需的短鏈接(域名+(項(xiàng)目名)+唯一標(biāo)識(shí))
長(zhǎng)鏈接轉(zhuǎn)成短鏈接
/*** 短鏈接工具類*/ @Component public class ShortUrlUtils {public static final String SHORT_URL = "shortUrl"; @Autowiredprivate RedisClient redisClient;/*** 根據(jù)連接獲取短鏈接*/public String LongToShort(String longUrl){String[] urls = shortUrl(longUrl);Random random = new Random();int num = random.nextInt(4);String url = urls[num];//防止重復(fù)Object obj = redisClient.get(ShortUrlUtils.SHORT_URL + ":" + url);if(obj != null) return LongToShort(longUrl);return url;}public String[] shortUrl(String url) {// 可以自定義生成 MD5 加密字符傳前的混合 KEYString key = "jixiang" ;// 要使用生成 URL 的字符String[] chars = new String[] { "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" , "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"};// 對(duì)傳入網(wǎng)址進(jìn)行 MD5 加密String sMD5EncryptResult = MD5Util.md5(key + url);String hex = sMD5EncryptResult;String[] resUrl = new String[4];for ( int i = 0; i < 4; i++) {// 把加密字符按照 8 位一組 16 進(jìn)制與 0x3FFFFFFF 進(jìn)行位與運(yùn)算String sTempSubString = hex.substring(i * 8, i * 8 + 8);// 這里需要使用 long 型來(lái)轉(zhuǎn)換,因?yàn)?Inteper .parseInt() 只能處理 31 位 , 首位為符號(hào)位 , 如果不用 long ,則會(huì)越界long lHexLong = 0x3FFFFFFF & Long.parseLong (sTempSubString, 16);String outChars = "" ;for ( int j = 0; j < 6; j++) {// 把得到的值與 0x0000003D 進(jìn)行位與運(yùn)算,取得字符數(shù)組 chars 索引long index = 0x0000003D & lHexLong;// 把取得的字符相加outChars += chars[( int ) index];// 每次循環(huán)按位右移 5 位lHexLong = lHexLong >> 5;}// 把字符串存入對(duì)應(yīng)索引的輸出數(shù)組resUrl[i] = outChars;}return resUrl;} }通過(guò)短鏈接來(lái)訪問(wèn)原始的長(zhǎng)鏈接
/*** 短鏈接跳轉(zhuǎn)*/ @RestController public class ShortUrlController extends BaseAction {@Autowiredprivate RedisClient redisClient;/*** 接收第三方推送過(guò)來(lái)的數(shù)據(jù)* @return*/@RequestMapping(value = "/shortUrl/{message}")public void listParkRecordout(@PathVariable("message") String message, HttpServletRequest request, HttpServletResponse response) throws IOException {Object obj = redisClient.get(ShortUrlUtils.SHORT_URL + ":" + message);if(obj == null) return;//重定向response.sendRedirect(obj.toString());} }參考地址:https://blog.csdn.net/u013782879/article/details/80851784
總結(jié)
以上是生活随笔為你收集整理的springboot实现长链接转短链接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 神技—终端显示Linux系统信息
- 下一篇: godaddy 域名转向指南