欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringSecurity使用PasswordEncoder加密用戶密碼的示例代碼

 更新時(shí)間:2024年09月10日 09:20:20   作者:睆小白  
PasswordEncoder是Spring Security庫(kù)中的一個(gè)關(guān)鍵組件,它主要用于處理密碼的安全存儲(chǔ)和驗(yàn)證,本文將給大家介紹一下SpringSecurity使用PasswordEncoder加密用戶密碼的方法,需要的朋友可以參考下

1. 導(dǎo)入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 配置 PasswordEncoder

在配置類中創(chuàng)建一個(gè) PasswordEncoder 對(duì)象,并注入到 Spring 容器中。

@Configuration
public class SecurityConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();// 加密方式
    }
}

3. 使用 PasswordEncoder 加密用戶密碼

寫一個(gè)Service 類,注入 PasswordEncoder 對(duì)象,在注冊(cè)用戶時(shí)對(duì)密碼進(jìn)行加密。

@Service
public class ResUserBizImpl implements ResUserBiz{
    @Autowired
    private ResUserMapper resUserMapper;

    // 注入加密器
    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public int register(ResUserVO user) {
        //需要先查詢是否已經(jīng)存在相同用戶名
        // 創(chuàng)建條件構(gòu)造器
        QueryWrapper<Resuser> queryWrapper = new QueryWrapper<>();
        // 添加條件:用戶名
        queryWrapper.eq("username", user.getUsername());
        if (resUserMapper.selectOne(queryWrapper) != null) {
            // 已經(jīng)存在相同用戶名
            throw new RuntimeException("用戶名"+user.getUsername()+"已存在");
        }
        Resuser resuser = new Resuser();
        resuser.setUsername(user.getUsername());
        // 對(duì)密碼進(jìn)行加密
        String encodedPassword = passwordEncoder.encode(user.getPwd());
        System.out.println("加密后的密碼為:"+encodedPassword);
        resuser.setPwd(encodedPassword);
        resuser.setEmail(user.getEmail());
        resUserMapper.insert(resuser);
        return resuser.getUserid();
    }
}

測(cè)試加密情況:

在這里插入圖片描述

可能出現(xiàn)的問題:

我在測(cè)試的時(shí)候報(bào)了MysglDataTruncation錯(cuò)誤,提示Data truncation: Data too long for column 'pwd' at row 1(如下圖),提示了密碼長(zhǎng)度過長(zhǎng)。

這是因?yàn)?數(shù)據(jù)庫(kù)中 pwd 字段長(zhǎng)度為 50,而BCryptPasswordEncoder生成的加密密碼長(zhǎng)度通常為 60 個(gè)字符的字符串,所以出現(xiàn)了長(zhǎng)度過長(zhǎng)的錯(cuò)誤。

在這里插入圖片描述

在這里插入圖片描述

解決:修改數(shù)據(jù)庫(kù)字段長(zhǎng)度。

ALTER TABLE your_table MODIFY COLUMN pwd VARCHAR(255);

4. 使用 PasswordEncoder 驗(yàn)證用戶密碼

在登錄時(shí),使用 PasswordEncoder 的matches("明文", "密文")對(duì)比用戶輸入的密碼和數(shù)據(jù)庫(kù)中存儲(chǔ)的加密后的密碼是否匹配。

    @Override
    public Resuser searchUser(ResUserVO user) {
        QueryWrapper<Resuser> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username",user.getUsername());
        String pwd = user.getPwd();
        Resuser resuser = resUserMapper.selectOne(queryWrapper);
        if (resuser != null){
            //使用matches方法比較明文和加密后的密碼是否匹配
            if (passwordEncoder.matches(pwd,resuser.getPwd()))
                return resuser;
        }
        return null;
    }

到此這篇關(guān)于SpringSecurity使用PasswordEncoder加密用戶密碼的示例代碼的文章就介紹到這了,更多相關(guān)SpringSecurity PasswordEncoder加密密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

最新評(píng)論