SpringBoot+MyBatis實(shí)現(xiàn)MD5加密數(shù)據(jù)庫用戶密碼的方法
MD5加密是一種常見的加密方式,我們經(jīng)常用在保存用戶密碼和關(guān)鍵信息上。
MD5技術(shù)主要用于對(duì)用戶密碼加密,增加賬戶的安全性,他具有不可逆的特性,不會(huì)被輕易解密
MD5用途:
1.防止被篡改
2.防止直接看到明文
在很多網(wǎng)站在數(shù)據(jù)庫存儲(chǔ)用戶的密碼的時(shí)候都是存儲(chǔ)用戶密碼的MD5值。
1.數(shù)據(jù)庫中創(chuàng)建User表(username,password,salt)
2.創(chuàng)建User實(shí)體類(get、set方法,有無參構(gòu)造,equals和hashCode方法)
package com.example.demo.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data //get,set 方法 @AllArgsConstructor //有參構(gòu)造 @NoArgsConstructor //無參構(gòu)造 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.配置數(shù)據(jù)庫連接信息(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 # 服務(wù)器向客戶端不響應(yīng)為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"> <!-- 注冊(cè)--> <insert id="addUser"> insert into user(username,password,salt) values (#{username},#{password},#{salt}) </insert> </mapper>
5.創(chuàng)建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.創(chuàng)建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.重點(diǎn):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) { //密碼加密處理的實(shí)現(xiàn):md5算法的形式 //串 + password + 串 ------md5算法進(jìn)行加密,連續(xù)加載三次 //鹽值 + password + 鹽值 --------- 鹽值就是一個(gè)隨機(jī)的字符串 String oldPassword = user.getPassword(); //獲取鹽值(隨機(jī)生成一個(gè)鹽值) String salt = UUID.randomUUID().toString().toUpperCase(); //補(bǔ)全數(shù)據(jù):鹽值的記錄 user.setSalt(salt); //將密碼和鹽值作為一個(gè)整體加密處理,忽略原有密碼強(qiáng)度,提升了數(shù)據(jù)的安全性 String md5Password = getMD5Password(oldPassword, salt); //將加密后的密碼重新補(bǔ)全設(shè)置到user對(duì)象中 user.setPassword(md5Password); userMapper.addUser(user); } private String getMD5Password(String password,String salt){ for (int i = 0;i <3; i++){ //md5加密算法方法的調(diào)用(進(jìn)行三次加密) 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測試
發(fā)送請(qǐng)求
到此這篇關(guān)于SpringBoot+MyBatis實(shí)現(xiàn)MD5加密數(shù)據(jù)庫用戶密碼的文章就介紹到這了,更多相關(guān)MyBatis加密數(shù)據(jù)庫密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中利用BitMap位圖實(shí)現(xiàn)海量級(jí)數(shù)據(jù)去重
有許多方法可以用來去重,比如使用列表、集合等等,但這些方法通常只適用于一般情況,然而,當(dāng)涉及到大量數(shù)據(jù)去重時(shí),常見的 Java Set、List,甚至是 Java 8 的新特性 Stream 流等方式就顯得不太合適了,本文給大家介紹了Java中利用BitMap位圖實(shí)現(xiàn)海量級(jí)數(shù)據(jù)去重2024-04-04Java生產(chǎn)者消費(fèi)者模式實(shí)例分析
這篇文章主要介紹了Java生產(chǎn)者消費(fèi)者模式,結(jié)合實(shí)例形式分析了java生產(chǎn)者消費(fèi)者模式的相關(guān)組成、原理及實(shí)現(xiàn)方法,需要的朋友可以參考下2019-03-03maven中deploy命令報(bào)401錯(cuò)誤的原因及解決方案
在mac版idea使用過程中有時(shí)候會(huì)出現(xiàn)deploy時(shí)候報(bào)401錯(cuò)誤,所以本文給大家介紹了maven 中deploy命令報(bào)401錯(cuò)誤的原因及解決方案,文章通過圖文結(jié)合的方式講解的非常詳細(xì),需要的朋友可以參考下2024-05-05Springboot @Validated和@Valid的區(qū)別及使用詳解
這篇文章主要介紹了Springboot @Validated和@Valid的區(qū)別及使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05java實(shí)現(xiàn)計(jì)算器加法小程序(圖形化界面)
這篇文章主要介紹了Java實(shí)現(xiàn)圖形化界面的計(jì)算器加法小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05