# ToolKit **Repository Path**: yunpoyuechu/tool-kit ## Basic Information - **Project Name**: ToolKit - **Description**: 基于SpringBoot3和Vue3的前后端分离的在线工具箱 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-08-07 - **Last Updated**: 2026-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 山月的工具箱 ## 验证模块 ### 登录功能 使用用户名/邮箱地址(二者都唯一)和密码进行登录,用户名长度限制为2-20,密码长度限制为6-20,有**记住我**功能 1. 使用SpringSecurity进行认证与授权 配置登录接口、成功/失败处理、登出处理。对API接口进行权限控制,只有经过认证和授权的用户才能访问手保护资源 2. 使用JWT作为认证凭证 登录成功,服务器生成一个JWT令牌返回给客户端,客户端在后续请求中携带此令牌进行身份验证,实现无状态API认证 3. JWT黑名单 支持JWT令牌的失效管理,通过已登出或强制失效的令牌加入Redis黑名单,确保令牌的安全性 4. 异常统一处理 针对认证和授权过程中可能出现的异常,如未认证、权限不足等,提供统一的JSON格式错误响应 ### 注册功能 使用用户名、密码、重复密码、电子邮件地址、验证码进行注册新用户,验证码发送到邮箱 1. 获取邮箱验证码,用户在注册页面输出邮箱地址并请求验证码。系统通过ip限流检查,防止恶意刷取。验证码生成后,通过RabbitMQ异步发送到用户邮箱,并存储在Redis中用于后面进行比较,设置过期时间。 2. 提交注册信息,用户收到验证码后,输入完整信息提交注册请求。 3. 后端验证与处理,后端接收到注册请求过后,进行验证码是否正确且未过期、邮箱是否被注册、用户名是否被注册、密码加密处理 4. 完成注册,所有验证通过后,系统将新用户的信息保存到数据库中,然后清除Redis中的验证码缓存,完成注册 ### 忘记密码功能 第一步,利用电子邮箱地址和验证码开始重置密码。第二步,输入密码和重复密码进行重置。 1. 请求验证码,用户在忘记密码页面输入注册时使用的邮箱地址,并请求发送验证码。系统会进行IP限流检查,防止恶意刷取。验证码生成后,通过RabbitMQ异步发送至用户邮箱,并存储在Redis中,设置有效期。 2. 验证验证码,用户收到验证码后,在页面上输入邮箱和收到的验证码,提交验证请求。后端会校验验证码的正确性和有效性。 3. 重置密码,验证码校验通过后,用户可以输入新的密码。后端接收到新密码后,会对其进行加密处理,并更新数据库中对应的用户密码。 ## 首页模块 ## 收藏模块 ## 编程工具模块(/api/codeTool) ### MD5哈希(/md5-hash) 利用MD5RequestVO接收前端发送的文本(text),然后进行处理,先计算32位小写MD5,再转换为32位大写,然后取32位小写MD5中间的16位作为小写16写,再转换为16位大写,最后通过MD5ResponseVO返回结果。 ### 进制转换(/number-change) 利用NumberChangeRequestVO接收前端发送的源进制(sourceBase)、目标进制(targerBase)、输入内容(inputValue),首先判断输入内容,为空则返回**空**,不为空给则再判断,源进制和目标进制是不在2-36之间则返回**进制范围应在2-36之间**,然后把源进制转换为十进制,再把十进制转换为目标进制进行返回。 ## 生活工具模块(/api/lifeTool) ### 称呼计算(/Relationship) 首先利用POST请求Relation向数据库获取所有称呼记录返回给前端,前端将输入的文本发送到后端Relationship,后端进行 1. 文本预处理 将文本去除空格,统一**我**、**我的**为**我**,保证以**我**为开头 2. 拆分称呼节点 把的拆出来,例如**我妈妈的妹妹的老公的儿子**拆分为[“我”,“妈妈”,”妹妹,”“老公”,”儿子”] 3. 关系链推理 然后进行推理,当前为**我**,下一个为**妈妈**,得出结果为**妈妈**, 然后当前为**妈妈**,下一个为**妹妹**,得出结果为**姨妈** 然后当前为姨妈,下一个是**老公**,得出结果为**姨丈** 然后当前为**姨丈**,下一个是儿子,得出结果是表弟 技术: 1. 校验与预处理 利用String.trim()将文本去除空格,利用String.replaceAll()统一**我**、**我的**为**我**,保证以**我**为开头 2. 拆分关系链 使用String.split(“的”)切割文本成数组,特殊处理将**我妈妈**转换成[“我”,”妈妈”],再使用System.arraycopy重组数组,保持链的完整性 3. 关系链有效性检查 使用数组长度判断,确保至少存在一层关系 4. 关系链推理 根据前一个称呼current和当前节点next查找对应的亲属称呼,首先使用Redis查询缓存,Redis存储结构为哈希表key,field,value,若没有找到则去mysql中查找,找到后回写Redis缓存,让下次相同的组合不必去mysql,出错时终止 5. 返回最终称呼,每一步都把current作为当前推理结果,遍历结束后,current为完整关系链的最终结果 ### MBI计算 ### 日期计算 ## 文本工具模块(api/textTool) ### 大小写转换 ### 字数统计 ## 数学工具模块(api/mathTool) ### 数字金额转换 ### 面积换算 ### 字节换算 ### 长度换算 ### 质量换算 ### 时间换算