使用 BCryptPasswordEncoder 隨機鹽加密步驟:
1.導入springboot的安全框架依賴:
<!-- BCryptPasswordEncoder 加密--> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.0.1.RELEASE</version> </dependency>
2.初始化 BCryptPasswordEncoder
package cn.mindgd.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * 加密工具初始化 */ @Configuration public class PasswordConfig { @Bean public BCryptPasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } }
3.使用 BCryptPasswordEncoder 加密 和 驗證,如下
package cn.mindgd.test; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * BCryptPasswordEncoder測試類 */ @SpringBootTest public class BCryptPasswordEncoderTest { @Autowired private BCryptPasswordEncoder passwordEncoder; @Test public void testBCryptPasswordEncoder() { String password = "admin123"; String encodePassword = passwordEncoder.encode(password);//隨機鹽加密后的密碼 System.out.println("輸出:" + encodePassword); String ep = ""; boolean flag = passwordEncoder.matches(password, encodePassword); if (flag) {//判斷 matches()方法的值去判斷密碼是否正確 System.out.println("驗證成功!!"); } else { System.out.println("驗證失敗!!"); } System.out.println("長度:" + encodePassword.length()); } }
結果如下:
現在我們用生成的字符串去驗證:
下面我們來寫一下驗證賬號密碼的思路:
1.先通過用戶名判斷是否存在
2.使用 matches()驗證密碼,第一個參數就是前端傳過來的密碼,第二個參數為存在數據庫加密過的密碼
一般就是這兩個步驟,由於我做的項目是邏輯刪除和狀態的,所以多做了這個步驟
/** * @author: JiaXinMa * @description: 驗證賬號密碼 * @date: 2021/4/2 */ public User findUserByNameAndPwd(String username, String password) { try { //1.判斷用戶名是否存在 User user = new User(); user.setUsername(username); QueryWrapper<User> queryWrapper = Wrappers.query(user); User loginUser = userMapper.selectOne(queryWrapper); if (loginUser == null) { throw new MdException(ExceptionEnum.INVALID_USERNAME); } //2.判斷密碼是否正確 if (!passwordEncoder.matches(password, loginUser.getPassword())) { throw new MdException(ExceptionEnum.INVALID_PASSWORD); } //3.判斷用戶是存在和啟用,is_delete 0為不刪除,status 1為啟動狀態 if (loginUser.getIsDelete().equals('1') || loginUser.getStatus() == 0) { throw new MdException(ExceptionEnum.INVALID_USERNAME); } return loginUser; } catch (Exception e) { throw new MdException(ExceptionEnum.INVALID_USERNAME_PASSWORD); } }
想看更多精彩內容,可以關注我的CSDN