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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 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月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
23天前
|
存储 安全 Java
|
1月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
73 1
|
2月前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
|
2月前
|
Java Spring
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
本文介绍了如何在Spring Boot项目中集成Swagger 2.x和3.0版本,并提供了解决Swagger在Spring Boot中启动失败问题“Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerEx”的方法,包括配置yml文件和Spring Boot版本的降级。
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
|
3月前
|
JSON 测试技术 API
Python开发解析Swagger文档小工具
文章介绍了如何使用Python开发一个解析Swagger文档的小工具,该工具可以生成符合httprunner测试框架的json/yaml测试用例,同时还能输出Excel文件,以方便测试人员根据不同需求使用。文章提供了详细的开发步骤、环境配置和使用示例,并鼓励读者为该开源项目贡献代码和建议。
71 1
Python开发解析Swagger文档小工具
|
3月前
|
Java API Spring
springboot集成swagger
这篇文章介绍了如何在Spring Boot项目中集成Swagger 2.10.0来生成API文档,包括添加依赖、编写配置类、创建接口文档,并使用Knife4j美化Swagger界面。
|
4月前
|
JSON 缓存 Java
Spring Boot集成 Swagger2 展现在线接口文档
本节课详细分析了 Swagger 的优点,以及 Spring Boot 如何集成 Swagger2,包括配置,相关注解的讲解,涉及到了实体类和接口类,以及如何使用。最后通过页面测试,体验了 Swagger 的强大之处,基本上是每个项目组中必备的工具之一,所以要掌握该工具的使用,也不难。
|
3月前
|
Java
SpringBoot 配置 Swagger
SpringBoot 配置 Swagger
39 0
|
4月前
|
编解码 安全 Java
如何在Spring Boot中实现数据加密
如何在Spring Boot中实现数据加密

热门文章

最新文章