Spring Boot+Security使用BCryptPasswordEncoder加密使用者登入密碼
阿新 • • 發佈:2021-01-13
技術標籤:spring bootspringbootsecurity加密解密
BCryptPasswordEncode
r的具體介紹我就不多說了,網上到處都是,比如這個:
BCryptPasswordEncoder加密、驗證策略
我這裡就是記錄一下怎麼用。
因為它是基於Security的,所以在使用之前,需要在pom.xml
匯入依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</ artifactId>
</dependency>
重新整理一下maven,然後就可以用了
為了在使用的時候不麻煩,先定義一個工具類
package com.example.yuyun.security.utils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* 安全服務工具類
* @Author HeYunHui
* @create 2021/1/11 1:32
*/
public class SecurityUtils {
/**
* 生成BCryptPasswordEncoder密碼
* @param password 密碼
* @return 加密字串
*/
public static String encodePassword(String password)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.encode(password);
}
/**
* 判斷密碼是否相同
* @param rawPassword 真實密碼
* @param encodedPassword 加密後字元
* @return 結果
*/
public static boolean matchesPassword(String rawPassword, String encodedPassword)
{
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.matches(rawPassword, encodedPassword);
}
}
1、加密
SecurityUtils.encodePassword("密碼")
如:我在註冊時對使用者輸入的密碼進行加密:
@PostMapping("register")
@ResponseBody
public HashMap register(@RequestBody Users users) throws Exception{
HashMap m = new HashMap();
try {
/** encode()加密 */
users.setUserPwd(SecurityUtils.encodePassword(users.getUserPwd()));
Boolean u=userService.insertUsers(users);
if (u==true){
m.put("code", String.valueOf(HttpStatus.SUCCESS));
m.put("msg","註冊成功");
}else {
m.put("msg","error");
}
} catch (Exception e) {
e.printStackTrace();
m.put("msg","error");
}
return m;
}
加密了之後,資料庫中儲存的密碼就變成了密文
2、解密
那加密之後如何解密呢?
使用BCryptPasswordEncoder加密之後
,沒有解密之說,只能對密碼進行驗證,也就是
將資料庫儲存的加密密碼與使用者輸入的密碼比較
返回值為true
,則密碼輸入正確,登入成功;返回false
,密碼錯誤
驗證密碼:
SecurityUtils.matchesPassword("使用者輸入的密碼","資料庫中儲存的密碼")
在登入中:
@PostMapping("login")
@ResponseBody
public HashMap<String,String> login(
@RequestBody User user) throws IOException {
HashMap hashMap=new HashMap(10);
try {
/** 先根據使用者輸入的使用者名稱查詢資料 */
Users u=userService.findPwdByName(user.getUserName());
/** matchesPassword()驗證使用者輸入密碼和資料庫加密密碼是否一致 */
if(u!=null&& SecurityUtils.matchesPassword(user.getUserPwd(),u.getUserPwd())){
hashMap.put("code", String.valueOf(HttpStatus.SUCCESS));
hashMap.put("msg","登入成功");
}
else {
hashMap.put("msg","使用者名稱或密碼錯誤");
}
} catch (Exception e) {
e.printStackTrace();
hashMap.put("msg","error");
}
return hashMap;
}