城北区工程建设信息网站,山东禹城市建设局网站,灌云网站建设,偏门网站建设文章目录项目业务层一、实现发布博客1.1 编辑器组件二、实现修改博客三、实现删除博客四、加密/加盐4.1 加密介绍4.2 密码算法分类4.3 加密实现项目业务层 在前两个博文中#xff0c;已经实现了一些功能#xff0c;该篇将继续处理剩下的功能。 一、实现发布博客 约定前后端…文章目录项目业务层一、实现发布博客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至此整个博客系统可以算是小成了但还是有很多功能可以进行开发不断完善。后续将会不断添加新的功能。