【SSM开发实战:博客系统】(三)核心业务功能开发与安全加密实现
文章目录项目业务层一、实现发布博客1.1 编辑器组件二、实现修改博客三、实现删除博客四、加密/加盐4.1 加密介绍4.2 密码算法分类4.3 加密实现项目业务层在前两个博文中已经实现了一些功能该篇将继续处理剩下的功能。一、实现发布博客约定前后端交互接口好的我帮你把这个接口整理成规范的接口文档格式包含核心的请求和响应信息基本信息接口地址/blog/add请求方式POST接口描述用于新增一篇博客文章请求参数参数名类型是否必填说明userIdNumber是发布用户IDtitleString是博客标题contentString是博客正文内容请求示例{userId:1,title:标题,content:正文}实现Controller 层因为请求参数需要对应的实体类和数据库中对应的实体类不一致因此需要额外处理一个接口实体类并进行数据转换。且保证接口对应实体属性不为空。接口PostMapping(/add)publicResultaddBlogInfo(ValidatedRequestBodyAddBlogRequestaddBlogRequest){log.info(发布博客,request:{},addBlogRequest);returnResult.ok(blogService.addBlogInfo(addBlogRequest));}实现Service 层OverridepublicBooleanaddBlogInfo(AddBlogRequestaddBlogRequest){BlogInfoblogInfoBeanTransUtils.transBlogInfo(addBlogRequest);try{blogInfoMapper.insert(blogInfo);returntrue;}catch(Exceptione){thrownewBlogException(博客发布失败);}}数据处理抽取为公共模块处理代码和前两个章节中基本一致。1.1 编辑器组件发布博客使用的编辑器使用editor.md 进行编辑是一个开源的页面markdown组件。官网详见http://editor.md.ipandao.com/使用时引入对应依赖即可。测试发布结果可正常进行博文的发布二、实现修改博客功能当进入用户详情页时如果当前登录用户正是文章作者则在导航栏中显示编辑和删除按钮点击进行对应处理。约定前后端交互接口基本信息接口地址/blog/update请求方式POSTContent-Typeapplication/json接口描述用于更新一篇已存在的博客文章请求参数参数名类型是否必填说明idString是博客文章IDtitleString是博客标题contentString是博客正文内容请求示例{id:4,title:测试修改文章,content:在这里写下一篇博客}实现 Controller 层PostMapping(/update)publicBooleanupdateBlog(ValidatedRequestBodyUpdateBlogRequestupdateBlogRequest){log.info(修改博客request:{},updateBlogRequest);returnblogService.updateBlog(updateBlogRequest);}实现Service 层OverridepublicBooleanupdateBlog(UpdateBlogRequestupdateBlogRequest){BlogInfoblogInfoBeanTransUtils.transUpdateBlogInfo(updateBlogRequest);try{intiblogInfoMapper.updateById(blogInfo);returni1;}catch(Exceptione){thrownewBlogException(博客更新失败);}}数据转换同上。在前端进行判断处理是否需要显示对应的编辑和删除按钮。三、实现删除博客约定前后端交互接口基本信息接口地址/blog/delete请求方式GET/POST接口描述用于删除指定的博客文章请求参数参数名类型是否必填说明blogIdNumber是要删除的博客ID请求示例/blog/delete?blogId1实现Controller 层PostMapping(/delete)publicBooleandeleteBlog(NotNullIntegerblogId){log.info(删除博客blogId:{},blogId);returnblogService.deleteBlog(blogId);}实现Service 层OverridepublicBooleandeleteBlog(IntegerblogId){BlogInfoblogInfonewBlogInfo();blogInfo.setId(blogId);blogInfo.setDeleteFlag(Constants.IS_DELETE);try{intiblogInfoMapper.updateById(blogInfo);returni1;}catch(Exceptione){thrownewBlogException(博客删除失败);}}验证测试发现博文可以正确被对应的用户作者删除。四、加密/加盐4.1 加密介绍在MySQL数据库中需要对密码身份证号手机号等敏感信息进行加密以保证数据的安全性。如果使用明文存储当黑客入侵了数据库时就可以轻松获取到用户的相关信息从而对用户或者企业造成信息泄漏或者财产损失。目前用户的密码还是明文设置的为了保护用户的密码信息需要对密码进行加密4.2 密码算法分类密码算法主要分为三类对称密码算法非对称密码算法摘要算法。对称密码算法是指加密秘钥和解密秘钥相同的密码算法。常见的对称密码算法有AES, DES, 3DES, RC4, RC5, RC6 等。非对称密码算法是指加密秘钥和解密秘钥不同的密码算法。该算法使用一个秘钥进行加密用另外一个秘钥进行解密。加密秘钥可以公开又称为公钥解密秘钥必须保密又称为私钥常见的非对称密码算法有RSA, DSA, ECDSA, ECC 等摘要算法是指把任意长度的输入消息数据转化为固定长度的输出数据的一种密码算法。摘要算法是不可逆的也就是无法解密。通常用来检验数据的完整性的重要技术即对数据进行哈希计算然后比较摘要值判断是否一致。常见的摘要算法有MD5, SHA系列(SHA1, SHA2等), CRC(CRC8, CRC16, CRC32)根据上述也可以将密码算法分为两类可逆密码算法和不可逆密码算法。4.3 加密实现问题虽然经过MD5加密后的密文无法解密但由于相同的密码经过MD5哈希之后的密文是相同的当存储用户密码的数据库泄露后攻击者会很容易便能找到相同密码的用户从而降低了破解密码的难度。因此在对用户密码进行加密时需要考虑对密码进行包装即使是相同的密码也保存为不同的密文。即使用户输入的是弱密码也考虑进行增强从而增加密码被攻破的难度。解决方案采用为一个密码拼接一个随机字符来进行加密这个随机字符我们称之为“盐”。假如有一个加盐后的加密串黑客通过一定手段这个加密串他拿到的明文并不是加密前的字符串而是加密前的字符串和盐组合的字符串这样相对来说又增加了字符串的安全性。解密流程MD5是不可逆的通常采用“判断哈希值是否一致”来判断密码是否正确。如果用户输入的密码和盐值一起拼接后的字符串经过加密算法得到的密文相同我们就认为密码正确密文相同盐值相同推测明文相同此处的Md5实现使用的是Spring 提供的工具类实现的。随机盐值使用UUID进行生成。加密工具类publicclassMd5Utils{/** * Md5加密 */publicstaticStringenrypt(Stringpassword){// 获取盐值StringsaltUUID.randomUUID().toString().replace(-,);// 获取Md5密文StringsecretPasswordDigestUtils.md5DigestAsHex((saltpassword).getBytes(StandardCharsets.UTF_8));returnsaltsecretPassword;}/** * 验证密码 */publicstaticBooleanverify(StringinputPassword,StringsqlPassword){if(!StringUtils.hasLength(sqlPassword)||!StringUtils.hasLength(inputPassword)){returnfalse;}if(sqlPassword.length()!Constants.MD5_LENGTH){returnfalse;}// 用户输入的密文StringsaltsqlPassword.substring(0,32);StringsecretPasswordDigestUtils.md5DigestAsHex((saltinputPassword).getBytes(StandardCharsets.UTF_8));returnsqlPassword.equals(saltsecretPassword);}}使用测试类给密码123456进行密文的生成32位密文与32位盐值组合在一起为存放的密文d265f60759754a10af8f8228675f5ef4911d9c50298afddaa4dc49af0a353881至此整个博客系统可以算是小成了但还是有很多功能可以进行开发不断完善。后续将会不断添加新的功能。

相关新闻

利用大数据打造个性化用户画像

利用大数据打造个性化用户画像

利用大数据打造个性化用户画像:从0到1读懂你的用户 引言:你真的“懂”你的用户吗? 清晨打开电商APP,首页推的是你上周浏览过的户外帐篷;中午刷视频平台,推荐列表全是你喜欢的悬疑剧解说;晚上收到…

2026/5/17 2:50:52 阅读更多 →
【GaussDB】从RBAC到精细化控制的企业级安全实践

【GaussDB】从RBAC到精细化控制的企业级安全实践

在数据驱动的数字化转型浪潮中,数据库权限管理已成为企业数据安全的生命线。华为GaussDB作为分布式数据库的领军者,通过​​多层权限模型​​与​​动态审计机制​​,构建了兼顾灵活性与安全性的访问控制体系。本文将深入解析其技术原理、实操…

2026/5/17 2:50:51 阅读更多 →
小程序毕设项目:基于springboot+Android的养宠交流系统的设计与开发(源码+文档,讲解、调试运行,定制等)

小程序毕设项目:基于springboot+Android的养宠交流系统的设计与开发(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/4 3:49:37 阅读更多 →

最新新闻

iOS27 App Intents 实战

iOS27 App Intents 实战

iOS27 App Intents 实战:新版 Siri 快捷指令接入全流程教程随着WWDC2026的正式落幕,苹果推送的iOS27带来了Siri架构的全面重构,其中最核心的变化就是正式弃用SiriKit,将App Intents确立为第三方应用接入Siri的唯一官方框架。对于开…

2026/7/5 3:29:02 阅读更多 →
Transformer 英中翻译实战:PyTorch 从零实现,BLEU 值提升 15% 的 3 个关键调参技巧

Transformer 英中翻译实战:PyTorch 从零实现,BLEU 值提升 15% 的 3 个关键调参技巧

Transformer 英中翻译实战:PyTorch 从零实现,BLEU 值提升 15% 的 3 个关键调参技巧在机器翻译领域,Transformer 架构已经成为事实上的标准。本文将带你从零开始实现一个完整的英中翻译模型,并分享三个经过实战验证的关键调参技巧&…

2026/7/5 3:27:02 阅读更多 →
利用RAG构建品牌AI知识库:六步SOP提升技术影响力

利用RAG构建品牌AI知识库:六步SOP提升技术影响力

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你的品牌、产品、技术文档,是否正在被 AI 遗忘?当开发者向 ChatGPT、Claude 或国内大模型提问“如何集成 XX S…

2026/7/5 3:25:01 阅读更多 →
DesignWare® Cores LPDDR5/4/4x PHY for TSMC12FFC18 Databook的中文版

DesignWare® Cores LPDDR5/4/4x PHY for TSMC12FFC18 Databook的中文版

DesignWare Cores LPDDR5/4/4x PHY for TSMC12FFC18 Databook的中文版,dwc_lpddr54_phy_tsmc12ffc18- Product Code: D774-0,PHY Version: 2.40a July 8, 2021,是DW LPDDR5/4 PHY在TSMC12FFC工艺下的技术数据手册,为芯片设计者提供…

2026/7/5 3:25:01 阅读更多 →
曲线曲线2D解析求交方案

曲线曲线2D解析求交方案

曲线曲线2D解析求交方案 文章目录曲线曲线2D解析求交方案一. 2D 点到椭圆的最近点计算1. 推荐主方案:λ 方程 Halley bracket 保护2. bracket 区间3. Halley bracket 保护4. Newton bracket 对比实现5. 轴线和中心特殊情况6. 椭圆弧最近点7. 方向角初值方案的定位…

2026/7/5 3:23:00 阅读更多 →
Entity Framework 4.1 DbContext使用记之三——如何玩转实体的属性值?

Entity Framework 4.1 DbContext使用记之三——如何玩转实体的属性值?

今天为大家带来DbSet.Local属性的使用与实现。和上次介绍的Find函数首先查找context中缓存的实体类似,DbSet的Local属性也是返回context中缓存并且被跟踪的实体。不同点在于,Local属性不会返回状态为EntityState.Deleted的实体,且即使缓存中什…

2026/7/5 3:23:00 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻