短链接网站系统设计与实践

简介

本短链接网站系统,短链接指将长链接网址转换固定长度的短链接
短链接http://8.134.130.51:9999/material_short_link/7bEvim

一、技术

前端:Vue2、element-ui
后端:Spring boot 、Mybatis-plus、Jwt、Redis

二、项目流程

登录

在这里插入图片描述

public Map<String,Object> authLogin(String account, String password) {
        SysUser sysUser = userService.getOne(Wrappers.lambdaQuery(SysUser.class)
                .eq(SysUser::getAccount, account)
                .eq(SysUser::getPassword, password));
        if (sysUser != null && sysUser.getStatus()) {
            Map<String,Object> map = new HashMap<>(2);
            String tokenFormat = StringUtils.format(RedisConstants.TOKEN_CATALOG, sysUser.getId());
            String menuFormat = StringUtils.format(RedisConstants.MENU_CATALOG, sysUser.getId());
            if (redisUtils.exists(tokenFormat) && redisUtils.exists(tokenFormat)) {
                threadPoolTaskExecutor.execute(()->{
                    log.info("----------- Redis token 续命 -----------");
                    redisUtils.expire(tokenFormat,RedisConstants.TOKEN_OVERDUE_TIME);
                    redisUtils.expire(menuFormat,RedisConstants.TOKEN_OVERDUE_TIME);
                });
                String token = redisUtils.get(tokenFormat).toString();
                List<SysMenu> menus = (List<SysMenu>) redisUtils.get(menuFormat);
                map.put("token",token);
                map.put("menu",menus);
            } else {
                String token = TokenUtil.doGenerateToken(sysUser.getId().toString());
                List<SysMenu> menus = sysMenuService.getMenuByUserId(sysUser.getId());
                if (menus != null) {
                    threadPoolTaskExecutor.execute(()->{
                        log.info("----------- Redis token 存储 -----------");
                        redisUtils.set(tokenFormat,token ,RedisConstants.TOKEN_OVERDUE_TIME);
                        redisUtils.set(menuFormat,menus ,RedisConstants.TOKEN_OVERDUE_TIME);
                    });
                    map.put("token",token);
                    map.put("menu",menus);
                }
            }
            return map;
        }
        return null;
    }

生成短连接

在这里插入图片描述

/**
     * 生成短连接接口
     * @param url URL
     * @return 短连接
     */
    @Override
    public String generateShortLink(String url) {
        lock.lock();
        try {
            if (url != null) {
                String key = EncryptionLinkConstants.MD5_KEY;
                String shortCode = ShortUrlUtils.genShortCode(url);
                if (redisUtils.contain(shortCode)){
                    return this.baseMapper.selectOne(new LambdaQueryWrapper<ShortLinkInfo>().eq(ShortLinkInfo::getCode, shortCode)).getNewUrl();
                }
                String newUrl = baseProperties.getUrl()+shortCode;
                ShortLinkInfo shortLinkInfo = new ShortLinkInfo();
                // 雪花算法
                shortLinkInfo.setId(SnowflakeIdWorkerUtils.getUUID()).
                        setOldUrl(url).setNewUrl(newUrl).setUrlKey(key).setCode(shortCode);
                this.baseMapper.insert(shortLinkInfo);
                redisUtils.put(shortCode);
                return newUrl;
            }
        }catch (Exception e){
            log.error("生成URL数据异常:",e);
        } finally {
            lock.unlock();
        }
        return null;
    }

三、网站截图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、演示地址

地址:http://8.134.130.51:8086/#/
账号: admin
密码: 123456

总结

短链接的系统由本人开发,最近正在加急完善小功能,由于第一版功能简洁,在设计上可能不够完善,可能会出现些问题,欢迎大家在评论区留言指出,也可以提出问题和建议。

开源地址

地址:https://gitee.com/sdsdaasdad/material_cloud
在这里插入图片描述
网站设计参考文章:https://juejin.cn/post/7024055300449632269

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值