SpringBoot+MyBatis实现MD5加密数据库用户密码的方法

 更新时间:2024年03月21日 09:57:29   作者:两年半的个人练习生  
MD5技术主要用于对用户密码加密,增加账户的安全性,他具有不可逆的特性,不会被轻易解密,这篇文章给大家介绍SpringBoot+MyBatis实现MD5加密数据库用户密码的方法,感兴趣的朋友跟随小编一起看看吧

MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上。

MD5技术主要用于对用户密码加密,增加账户的安全性,他具有不可逆的特性,不会被轻易解密

MD5用途:
1.防止被篡改                        

2.防止直接看到明文

在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。

1.数据库中创建User表(username,password,salt)

2.创建User实体类(get、set方法,有无参构造,equals和hashCode方法)

package com.example.demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data                       //get,set 方法
@AllArgsConstructor         //有参构造
@NoArgsConstructor          //无参构造
public class User {
    private String username;
    private String password;
    private String salt;
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        User user = (User) o;
        if (getUsername() != null ? !getUsername().equals(user.getUsername()) : user.getUsername() != null)
            return false;
        if (getPassword() != null ? !getPassword().equals(user.getPassword()) : user.getPassword() != null)
            return false;
        return getSalt() != null ? getSalt().equals(user.getSalt()) : user.getSalt() == null;
    }
    @Override
    public int hashCode() {
        int result = getUsername() != null ? getUsername().hashCode() : 0;
        result = 31 * result + (getPassword() != null ? getPassword().hashCode() : 0);
        result = 31 * result + (getSalt() != null ? getSalt().hashCode() : 0);
        return result;
    }
}

3.配置数据库连接信息(application.properties)

spring.datasource.url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
mybatis.mapper-locations=classpath:mapper/*.xml
#user.address.max-count=20
# 服务器向客户端不响应为null的属性
#spring.jackson.default-property-inclusion=NON_NULL
# server.servlet.context-path=/store
# spring.servlet.multipart.maxFileSize=10MB
# spring.servlet.multipart.maxRequestSize=10MB

4.在资源文件中新建mapper映射文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
    <!--    注册-->
    <insert id="addUser">
        insert into user(username,password,salt) values (#{username},#{password},#{salt})
    </insert>
</mapper>

5.创建mapper(dao)层新建UserMapper接口

package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
    void addUser(User user);
}

6.创建service层新建IUserService接口

package com.example.demo.service;
import com.example.demo.entity.User;
import org.springframework.stereotype.Service;
public interface IUserService {
    void addUser(User user);
}

7.重点:MD5加密-------UserServiceImpl.java

package com.example.demo.service.Impl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;
@Service
public class UserServiceImpl implements IUserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public void addUser(User user) {
        //密码加密处理的实现:md5算法的形式
        //串 + password + 串 ------md5算法进行加密,连续加载三次
        //盐值 + password + 盐值 --------- 盐值就是一个随机的字符串
        String oldPassword = user.getPassword();
        //获取盐值(随机生成一个盐值)
        String salt = UUID.randomUUID().toString().toUpperCase();
        //补全数据:盐值的记录
        user.setSalt(salt);
        //将密码和盐值作为一个整体加密处理,忽略原有密码强度,提升了数据的安全性
        String md5Password = getMD5Password(oldPassword, salt);
        //将加密后的密码重新补全设置到user对象中
        user.setPassword(md5Password);
        userMapper.addUser(user);
    }
    private String getMD5Password(String password,String salt){
        for (int i = 0;i <3; i++){
            //md5加密算法方法的调用(进行三次加密)
            password = DigestUtils.md5DigestAsHex((salt+password+salt).getBytes()).toUpperCase();
        }
        //返回加密后的密码
        return password;
    }
}

8.UserController.java

package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.service.IUserService;
import com.example.demo.service.Impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @Autowired
    private IUserService iUserService;
    @RequestMapping("addUser")
    public String addUser(@RequestBody User user){
        System.out.println(user);
        iUserService.addUser(user);
        return "添加成功";
    }
}

9.Postman测试

 发送请求

到此这篇关于SpringBoot+MyBatis实现MD5加密数据库用户密码的文章就介绍到这了,更多相关MyBatis加密数据库密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 彻底搞懂Java多线程(二)

    彻底搞懂Java多线程(二)

    这篇文章主要给大家介绍了关于Java面试题之多线程和高并发的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-07-07
  • Spring Cloud下OAUTH2注销的实现示例

    Spring Cloud下OAUTH2注销的实现示例

    本篇文章主要介绍了Spring Cloud下OAUTH2注销的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Java实现简单的聊天室功能

    Java实现简单的聊天室功能

    这篇文章主要为大家详细介绍了Java实现简单的聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Java 画时钟遇到的问题及解决方案

    Java 画时钟遇到的问题及解决方案

    我是一个刚入门的小菜鸟,希望我写的东西可以帮助和我一样刚入门的兄弟们少走一些弯路,也希望大佬们可以多指点指点我。感谢!解决在画时钟遇到的问题让我花费不少时间...说两个困扰我比较久的
    2021-11-11
  • java 抛出异常处理的方法

    java 抛出异常处理的方法

    这篇文章主要介绍了java 抛出异常处理的方法的相关资料,throws关键字通常被应用在声明方法时,用来指定可能抛出的异常,这里就讲下如何使用,需要的朋友可以参考下
    2017-08-08
  • Java8 使用 stream().sorted()对List集合进行排序的操作

    Java8 使用 stream().sorted()对List集合进行排序的操作

    这篇文章主要介绍了Java8 使用 stream().sorted()对List集合进行排序的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 最小树形图模板朱刘算法分享

    最小树形图模板朱刘算法分享

    这篇文章主要介绍了最小树形图模板朱刘算法,有需要的朋友可以参考一下
    2014-01-01
  • Spring Boot 通过 Mvc 扩展方便进行货币单位转换的代码详解

    Spring Boot 通过 Mvc 扩展方便进行货币单位转换的代码详解

    这篇文章主要介绍了Spring Boot 通过 Mvc 扩展方便进行货币单位转换,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 生成8位随机不重复的数字编号的方法

    生成8位随机不重复的数字编号的方法

    生成随机不重复的数字编号在某些情况下也会用到,本文以生成8位随机不重复的数字编号为例与大家分享下具体的实现过程,感兴趣的朋友可以参考下
    2013-09-09
  • Spring条件注解@Conditional示例详解

    Spring条件注解@Conditional示例详解

    这篇文章主要给大家介绍了关于Spring条件注解@Conditional的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论