news 2026/4/23 9:46:34

【SSM开发实战:博客系统】(三)核心业务功能开发与安全加密实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【SSM开发实战:博客系统】(三)核心业务功能开发与安全加密实现

文章目录

    • 项目业务层
    • 一、实现发布博客
      • 1.1 编辑器组件
    • 二、实现修改博客
    • 三、实现删除博客
    • 四、加密/加盐
      • 4.1 加密介绍
      • 4.2 密码算法分类
      • 4.3 加密实现

项目业务层

在前两个博文中,已经实现了一些功能,该篇将继续处理剩下的功能。

一、实现发布博客

  1. 约定前后端交互接口
    好的,我帮你把这个接口整理成规范的接口文档格式,包含核心的请求和响应信息:

基本信息

  • 接口地址/blog/add
  • 请求方式POST
  • 接口描述:用于新增一篇博客文章

请求参数

参数名类型是否必填说明
userIdNumber发布用户ID
titleString博客标题
contentString博客正文内容

请求示例

{"userId":1,"title":"标题","content":"正文"}
  1. 实现Controller 层

因为请求参数需要对应的实体类和数据库中对应的实体类不一致,因此需要额外处理一个接口实体类并进行数据转换。且保证接口对应实体属性不为空。

接口:

@PostMapping("/add")publicResultaddBlogInfo(@Validated@RequestBodyAddBlogRequestaddBlogRequest){log.info("发布博客,request:{}",addBlogRequest);returnResult.ok(blogService.addBlogInfo(addBlogRequest));}
  1. 实现Service 层
@OverridepublicBooleanaddBlogInfo(AddBlogRequestaddBlogRequest){BlogInfoblogInfo=BeanTransUtils.transBlogInfo(addBlogRequest);try{blogInfoMapper.insert(blogInfo);returntrue;}catch(Exceptione){thrownewBlogException("博客发布失败");}}

数据处理抽取为公共模块处理,代码和前两个章节中基本一致。

1.1 编辑器组件

发布博客使用的编辑器使用editor.md 进行编辑,是一个开源的页面markdown组件。
官网详见:http://editor.md.ipandao.com/

使用时引入对应依赖即可。

测试发布,结果可正常进行博文的发布:

二、实现修改博客

功能:当进入用户详情页时,如果当前登录用户正是文章作者,则在导航栏中显示编辑和删除按钮,点击进行对应处理。

  1. 约定前后端交互接口

基本信息

  • 接口地址/blog/update
  • 请求方式POST
  • Content-Typeapplication/json
  • 接口描述:用于更新一篇已存在的博客文章

请求参数

参数名类型是否必填说明
idString博客文章ID
titleString博客标题
contentString博客正文内容

请求示例

{"id":"4","title":"测试修改文章","content":"在这里写下一篇博客"}
  1. 实现 Controller 层
@PostMapping("/update")publicBooleanupdateBlog(@Validated@RequestBodyUpdateBlogRequestupdateBlogRequest){log.info("修改博客,request:{}",updateBlogRequest);returnblogService.updateBlog(updateBlogRequest);}
  1. 实现Service 层
@OverridepublicBooleanupdateBlog(UpdateBlogRequestupdateBlogRequest){BlogInfoblogInfo=BeanTransUtils.transUpdateBlogInfo(updateBlogRequest);try{inti=blogInfoMapper.updateById(blogInfo);returni==1;}catch(Exceptione){thrownewBlogException("博客更新失败");}}

数据转换同上。

在前端进行判断处理是否需要显示对应的编辑和删除按钮。

三、实现删除博客

  1. 约定前后端交互接口

基本信息

  • 接口地址/blog/delete
  • 请求方式GET/POST
  • 接口描述:用于删除指定的博客文章

请求参数

参数名类型是否必填说明
blogIdNumber要删除的博客ID

请求示例

/blog/delete?blogId=1
  1. 实现Controller 层
@PostMapping("/delete")publicBooleandeleteBlog(@NotNullIntegerblogId){log.info("删除博客,blogId:{}",blogId);returnblogService.deleteBlog(blogId);}
  1. 实现Service 层
@OverridepublicBooleandeleteBlog(IntegerblogId){BlogInfoblogInfo=newBlogInfo();blogInfo.setId(blogId);blogInfo.setDeleteFlag(Constants.IS_DELETE);try{inti=blogInfoMapper.updateById(blogInfo);returni==1;}catch(Exceptione){thrownewBlogException("博客删除失败");}}

验证测试发现博文可以正确被对应的用户作者删除。

四、加密/加盐

4.1 加密介绍

在MySQL数据库中,需要对密码,身份证号,手机号等敏感信息进行加密,以保证数据的安全性。

如果使用明文存储,当黑客入侵了数据库时,就可以轻松获取到用户的相关信息,从而对用户或者企业造成信息泄漏或者财产损失。

目前用户的密码还是明文设置的,为了保护用户的密码信息,需要对密码进行加密

4.2 密码算法分类

密码算法主要分为三类:对称密码算法,非对称密码算法,摘要算法。

  1. 对称密码算法是指加密秘钥和解密秘钥相同的密码算法。常见的对称密码算法有:AES, DES, 3DES, RC4, RC5, RC6 等。

  2. 非对称密码算法是指加密秘钥和解密秘钥不同的密码算法。该算法使用一个秘钥进行加密,用另外一个秘钥进行解密。

    • 加密秘钥可以公开,又称为公钥
    • 解密秘钥必须保密,又称为私钥
      常见的非对称密码算法有:RSA, DSA, ECDSA, ECC 等
  3. 摘要算法是指把任意长度的输入消息数据转化为固定长度的输出数据的一种密码算法。摘要算法是不可逆的,也就是无法解密。通常用来检验数据的完整性的重要技术,即对数据进行哈希计算然后比较摘要值,判断是否一致。常见的摘要算法有:MD5, SHA系列(SHA1, SHA2等), CRC(CRC8, CRC16, CRC32)

根据上述也可以将密码算法分为两类:可逆密码算法和不可逆密码算法。

4.3 加密实现

问题:虽然经过MD5加密后的密文无法解密,但由于相同的密码经过MD5哈希之后的密文是相同的,当存储用户密码的数据库泄露后,攻击者会很容易便能找到相同密码的用户,从而降低了破解密码的难度。因此,在对用户密码进行加密时,需要考虑对密码进行包装,即使是相同的密码,也保存为不同的密文。即使用户输入的是弱密码,也考虑进行增强,从而增加密码被攻破的难度。

解决方案:采用为一个密码拼接一个随机字符来进行加密,这个随机字符我们称之为“盐”。假如有一个加盐后的加密串,黑客通过一定手段这个加密串,他拿到的明文并不是加密前的字符串,而是加密前的字符串和盐组合的字符串,这样相对来说又增加了字符串的安全性。

解密流程:MD5是不可逆的,通常采用“判断哈希值是否一致”来判断密码是否正确。

如果用户输入的密码,和盐值一起拼接后的字符串经过加密算法,得到的密文相同,我们就认为密码正确(密文相同,盐值相同,推测明文相同)


此处的Md5实现使用的是Spring 提供的工具类实现的。随机盐值使用UUID进行生成。

加密工具类:

publicclassMd5Utils{/** * Md5加密 */publicstaticStringenrypt(Stringpassword){// 获取盐值Stringsalt=UUID.randomUUID().toString().replace("-","");// 获取Md5密文StringsecretPassword=DigestUtils.md5DigestAsHex((salt+password).getBytes(StandardCharsets.UTF_8));returnsalt+secretPassword;}/** * 验证密码 */publicstaticBooleanverify(StringinputPassword,StringsqlPassword){if(!StringUtils.hasLength(sqlPassword)||!StringUtils.hasLength(inputPassword)){returnfalse;}if(sqlPassword.length()!=Constants.MD5_LENGTH){returnfalse;}// 用户输入的密文Stringsalt=sqlPassword.substring(0,32);StringsecretPassword=DigestUtils.md5DigestAsHex((salt+inputPassword).getBytes(StandardCharsets.UTF_8));returnsqlPassword.equals(salt+secretPassword);}}

使用测试类给密码123456进行密文的生成,32位密文与32位盐值组合在一起为存放的密文:d265f60759754a10af8f8228675f5ef4911d9c50298afddaa4dc49af0a353881

至此整个博客系统可以算是小成了,但还是有很多功能可以进行开发,不断完善。后续将会不断添加新的功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 17:58:16

【Spring 原理】Bean 的作用域与生命周期

文章目录一、Bean的作用域1.1 概念1.2 Bean的作用域二、Bean的生命周期2.1 概念2.1 代码演示一、Bean的作用域 1.1 概念 在Spring IoC&DI,Spring 是通过以下方式管理对象的。 通过Controller , Service , Repository , Component , Configuration , Bean 来声…

作者头像 李华
网站建设 2026/4/23 9:46:24

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

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

作者头像 李华
网站建设 2026/4/18 12:34:36

【课程设计/毕业设计】基于Python与Django的校园在线考试系统设计与实现基于Python+django的在线考试系统设计和实现【附源码、数据库、万字文档】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

作者头像 李华
网站建设 2026/4/15 18:57:25

10款Bug管理系统盘点:流程定制、通知降噪、报表复盘全解析

本文将深入对比2026年10款Bug跟踪管理系统:PingCode、Jira Software、Azure DevOps、GitLab Issues、YouTrack、Linear、Bugzilla、MantisBT、Worktile、TAPD。一、选型先定标准:流程跑得顺、通知不扰民、统计能复盘1、流程怎么判断“好不好用”&#xf…

作者头像 李华
网站建设 2026/4/18 11:10:44

【收藏必学】Java大模型后端开发实战:RAG应用架构与实现详解

在大模型技术从“实验室”走向“产业级应用”的过程中,工程化落地能力成为核心竞争力。后端服务作为大模型应用的“骨架”,承担着请求调度、数据处理、逻辑编排等关键职责,而Java凭借其稳定性、高并发处理能力和丰富的生态体系,成…

作者头像 李华