springboot实现长链接转短链接
生活随笔
收集整理的這篇文章主要介紹了
springboot实现长链接转短链接
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
自己編寫長鏈接轉短鏈接
原理:將長鏈接在后臺通過轉換的方式轉成所需的短鏈接(域名+(項目名)+唯一標識)
長鏈接轉成短鏈接
/*** 短鏈接工具類*/ @Component public class ShortUrlUtils {public static final String SHORT_URL = "shortUrl"; @Autowiredprivate RedisClient redisClient;/*** 根據連接獲取短鏈接*/public String LongToShort(String longUrl){String[] urls = shortUrl(longUrl);Random random = new Random();int num = random.nextInt(4);String url = urls[num];//防止重復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"};// 對傳入網址進行 MD5 加密String sMD5EncryptResult = MD5Util.md5(key + url);String hex = sMD5EncryptResult;String[] resUrl = new String[4];for ( int i = 0; i < 4; i++) {// 把加密字符按照 8 位一組 16 進制與 0x3FFFFFFF 進行位與運算String sTempSubString = hex.substring(i * 8, i * 8 + 8);// 這里需要使用 long 型來轉換,因為 Inteper .parseInt() 只能處理 31 位 , 首位為符號位 , 如果不用 long ,則會越界long lHexLong = 0x3FFFFFFF & Long.parseLong (sTempSubString, 16);String outChars = "" ;for ( int j = 0; j < 6; j++) {// 把得到的值與 0x0000003D 進行位與運算,取得字符數組 chars 索引long index = 0x0000003D & lHexLong;// 把取得的字符相加outChars += chars[( int ) index];// 每次循環按位右移 5 位lHexLong = lHexLong >> 5;}// 把字符串存入對應索引的輸出數組resUrl[i] = outChars;}return resUrl;} }通過短鏈接來訪問原始的長鏈接
/*** 短鏈接跳轉*/ @RestController public class ShortUrlController extends BaseAction {@Autowiredprivate RedisClient redisClient;/*** 接收第三方推送過來的數據* @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
總結
以上是生活随笔為你收集整理的springboot实现长链接转短链接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神技—终端显示Linux系统信息
- 下一篇: godaddy 域名转向指南