Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(上)

简介: Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(上)

⭐ 作者简介:码上言



⭐ 代表教程:Spring Boot + vue-element 开发个人博客项目实战教程



⭐专栏内容:零基础学Java个人博客系统

项目部署视频

https://www.bilibili.com/video/BV1sg4y1A7Kv/?vd_source=dc7bf298d3c608d281c16239b3f5167b

文章目录

一、Bug修改和插件安装

经过前面的代码接口测试,基本的功能都可以实现了,但是还是有存在的小错误,感谢读者给我提出来的,现在在这里更改一下,用户表里的手机字段设置的是11位,我们现在把那个11去掉,然后在User.java中把手机号的Integer类型改成String类型就可以了。

SQL语句更改为:

`phone`              BIGINT          NOT NULL DEFAULT 0                  COMMENT '手机号',

User.java更改为:

   /**
     * 手机号
     */
    private String phone;

接下来我们要安装一个关于Mybatis的插件,这个插件主要是方便我们快速从代码跳转到mapper及从mapper返回代码。

和以前安装插件一样,在IDEA软件中打开左上角的File中找到Setting,然后选择Plugins 进行搜索这个插件,安装完后重启IDEA即可。安装完之后,再打开mapper包里面的类,多出来了一个绿色箭头。点击绿色箭头就能跳转到mapper.xml中的具体实现的sql语句中。如下图所示:

二、调试

这一篇我们不往下继续写,来讲一下在我们开发中很重要的一个流程,那就是debug调试程序,在我们写程序的时候难免会有很多的bug存在,有的是一眼就能看出来的报错,还有的是一些逻辑的问题或者是有异常等无法得到想要的结果,这时候靠我们去用眼看或者去一行一行读,这些也不一定能解决出问题,尤其是我们初学者,代码都看不懂读个毛线代码去找错误,这时候调试就突出了优越感,接下来我带大家一起来学习。

1、Debug启动项目

这个调试也要启动项目,但并不是我们平时起的按钮,启动debug是用甲壳虫起的,如下图所示,打开你的项目,在右上角有个甲壳虫样子的图标,点击这个就是debug启动。点击这个小虫子按钮,等待项目启动。
项目启动起来之后,我们先测试一下添加的接口进行调试。

首先我们在接口的入口处打一个断点,也就是Controller层的地方,断点打在增加的方法里。出现了红色打钩的就是打断点。然后在Controller调用的Service的实现类层的增加方法中打一个断点。然后,我们看下控制台的数据,看这正是我们要传过来的数据,目前id和创建时间都是空,因为我们没有传值,都是数据表中自动加载的字段。以后我们调试的时候都是要注意这些请求数据的走向以及变化。按F8或者下图的小图标,再往下走一步跳到我们Service的实现类中。

然后就跳到了这个类中,看着数据也过来了。

然后再往下走一步,神奇的事情发生了,id变成了2,说明数据可能插入成功了。此时没有报错,再往下走一步,又跳到了Controller层中,返回结果。
再走一步,就跳到了这里。

到这里说明走完了流程。我们去看下数据库有没有数据。id为2的是刚刚添加成功的,debug流程走完了。

我们这里没有刻意去测试错误的程序,今天就先熟悉一下调试debug的流程,以后还会再继续使用的,如何去发现错误等操作。

三、用户密码加密

我们现在的用户的密码都是明文存储的,这是非常不安全的,在正常的工作开发中,基本上公司都有自己的加密方式,我们这里都平常的学习或者登录自己的博客,没有什么商业价值类的东西,所以我们加密采用MD5加密,对于我们自己的博客来说也足够了。

在我们添加加密类的时候,我们先引入一个工具,非常的好用,以后开发的时候可以经常用到。

官方文档:https://www.hutool.cn/docs/#/

在我们的项目pom.xml依赖它的包。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.16</version>
</dependency>

首先我们在项目的util包中新建一个 MD5Util.java类,里面有一个MD5方法,参数是我们要传的密码,代码的逻辑大家有时间可以研究研究。最下面还有一个main方法,可以自己测试一下,看看加密后的密码是多少。

package com.blog.personalblog.util;
import cn.hutool.core.util.StrUtil;
import java.security.MessageDigest;
/**
 * @author: SuperMan
 * 欢迎关注我的公众号:码上言
 * @create: 2021-11-14
 */
public class MD5Util {
    public  static String MD5(String s) {
        if (StrUtil.isEmpty(s) || StrUtil.isBlank(s)) {
            return null;
        }
        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        try {
            byte[] btInput = s.getBytes();
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            return null;
        }
    }
    public static void main(String[] args) {
        String str = "123789";
        System.out.println(MD5(str));
    }
}

加密的方法有了,接下来我们要在我们项目中使用这个方法,我们将数据一进来就进行密码加密,所以在Controller类进行判断和加密,在添加和修改的时候进行加密存储,我们页面不展示用户名的密码。

代码如下:

 /**
     * 添加用户
     * @return
     */
    @PostMapping("/create")
    public JsonResult<Object> userCreate(@RequestBody @Valid User user) {
        if (StrUtil.isEmpty(user.getPassWord())) {
            return JsonResult.error("密码为空,请填写密码!");
        }
        //密码加密存储
        user.setPassWord(MD5Util.MD5(user.getPassWord()));
        userService.createUser(user);
        return JsonResult.success();
    }
 /**
     *
     * 修改用户
     * @return
     */
    @PostMapping("/update")
    public JsonResult<Object> userUpdate(@RequestBody @Valid User user) {
        if (StrUtil.isEmpty(user.getPassWord())) {
            return JsonResult.error("密码为空,请填写密码!");
        }
        //密码加密存储
        user.setPassWord(MD5Util.MD5(user.getPassWord()));
        userService.updateUser(user);
        return JsonResult.success();
    }

此时就是对密码进行存储加密,写到此时完我又想起前几天一个粉丝说手机号的问题,我们这里也在加一个手机号验证的工具吧,我们在Util包中新建一个PhoneUtil.java类

package com.blog.personalblog.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @author: SuperMan
 * 欢迎关注我的公众号:码上言
 * @create: 2021-11-14
 */
public class PhoneUtil {
    /**
     * 验证手机号
     * @param mobile
     * @return
     */
    public static boolean checkMobile(String mobile){
        String phone_regex = "^((13[0-9])|(14[1,2,3,5,7,8,9])|(15[0-9])|(166)|(191)|(17[0,1,2,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
        if (mobile.length() != 11) {
            return false;
        } else {
            Pattern p = Pattern.compile(phone_regex);
            Matcher m = p.matcher(mobile);
            boolean isPhone = m.matches();
            if (!isPhone) {
                return false;
            }
            return true;
        }
    }
}

此时,我们再返回Controller层,进行手机号的验证,可以看出我们的工具类的实现流程,如果是正常的手机号会返回一个true,如果是错误的手机号会返回false。

完整代码如下:

package com.blog.personalblog.controller;
import cn.hutool.core.util.StrUtil;
import com.blog.personalblog.util.JsonResult;
import com.blog.personalblog.entity.User;
import com.blog.personalblog.service.UserService;
import com.blog.personalblog.util.MD5Util;
import com.blog.personalblog.util.PhoneUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
 * @author: SuperMan
 * 欢迎关注我的公众号:码上言
 * @create: 2021-11-03
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;
    /**
     * 用户列表
     * @return
     */
    @PostMapping("/list")
    public JsonResult<Object> list() {
        List<User> userList = userService.findAll();
        return JsonResult.success(userList);
    }
    /**
     * 添加用户
     * @return
     */
    @PostMapping("/create")
    public JsonResult<Object> userCreate(@RequestBody @Valid User user) {
        if (StrUtil.isEmpty(user.getPassWord())) {
            return JsonResult.error("密码为空,请填写密码!");
        }
        //密码加密存储
        user.setPassWord(MD5Util.MD5(user.getPassWord()));
        //判断手机号,这里用hutool工具类也可以
        if (!PhoneUtil.checkMobile(user.getPhone())) {
            return JsonResult.error("手机号码格式错误!");
        }
        userService.createUser(user);
        return JsonResult.success();
    }
    /**
     *
     * 修改用户
     * @return
     */
    @PostMapping("/update")
    public JsonResult<Object> userUpdate(@RequestBody @Valid User user) {
        if (StrUtil.isEmpty(user.getPassWord())) {
            return JsonResult.error("密码为空,请填写密码!");
        }
        //密码加密存储
        user.setPassWord(MD5Util.MD5(user.getPassWord()));
        //判断手机号,这里用hutool工具类也可以
        if (!PhoneUtil.checkMobile(user.getPhone())) {
            return JsonResult.error("手机号码格式错误!");
        }
        userService.updateUser(user);
        return JsonResult.success();
    }
    /**
     * 删除
     * @return
     */
    @PostMapping("/delete/{id}")
    public JsonResult<Object> userDelete(@PathVariable(value = "id") int id) {
        userService.deleteUser(id);
        return JsonResult.success();
    }
}

以上就是加了两个验证,大家可以先测试一下,手机号如果错误是否报错,添加的密码是否在数据库中加密。写完后,我们启动项目,打开Postman进行数据添加,首先验证密码是否加密存储。然后再测试手机号错误是否给返回错误信息。我输了10位的手机号,请求接口就给了错误的返回信息,说明加的两个工具都是可以。

目录
相关文章
|
1月前
|
JavaScript 前端开发 Java
Spring Boot 与 Vue.js 前后端分离中的数据交互机制
本文深入探讨了Spring Boot与Vue.js在前后端分离架构下的数据交互机制。通过对比传统`model.addAttribute()`方法与RESTful API的设计,分析了两者在耦合性、灵活性及可扩展性方面的差异。Spring Boot以RESTful API提供数据服务,Vue.js借助Axios消费API并动态渲染页面,实现了职责分明的解耦架构。该模式显著提升了系统的灵活性和维护性,适用于复杂应用场景如论坛、商城系统等,为现代Web开发提供了重要参考。
174 0
|
2月前
|
编解码 安全 Java
如何在Spring Boot中实现数据加密
本文介绍了如何在Spring Boot中实现数据加密。首先阐述了数据加密的重要性与应用场景,接着讲解了对称加密和非对称加密的原理及区别。通过添加依赖、配置加密算法、编写加密工具类等步骤,展示了具体实现方法,并在业务代码中应用加密技术保护敏感数据。希望对开发者有所帮助。
116 7
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
7月前
|
存储 安全 Java
|
7月前
|
存储 算法 安全
SpringBoot 接口加密解密实现
【10月更文挑战第18天】
|
7月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
132 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
7月前
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
126 1
|
7月前
|
JavaScript 前端开发 数据可视化
【SpringBoot+Vue项目实战开发】2020实时更新。。。。。。
【SpringBoot+Vue项目实战开发】2020实时更新。。。。。。
112 0
|
2月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
80 0

热门文章

最新文章