如何使用 BCryptPasswordEncoder 隨機鹽加密?如何應用到賬號密碼驗證思路?


使用 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

我的CSDN


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM