最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1. 導入依賴

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

2. 配置 PasswordEncoder

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

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

3. 使用 PasswordEncoder 加密用戶密碼

寫一個Service 類,注入 PasswordEncoder 對象,在注冊用戶時對密碼進行加密。

@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());
        // 對密碼進行加密
        String encodedPassword = passwordEncoder.encode(user.getPwd());
        System.out.println("加密后的密碼為:"+encodedPassword);
        resuser.setPwd(encodedPassword);
        resuser.setEmail(user.getEmail());
        resUserMapper.insert(resuser);
        return resuser.getUserid();
    }
}

測試加密情況:

在這里插入圖片描述

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

我在測試的時候報了MysglDataTruncation錯誤,提示Data truncation: Data too long for column 'pwd' at row 1(如下圖),提示了密碼長度過長。

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

在這里插入圖片描述

在這里插入圖片描述

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

ALTER TABLE your_table MODIFY COLUMN pwd VARCHAR(255);

4. 使用 PasswordEncoder 驗證用戶密碼

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

    @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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Java全面細致講解Wrapper的使用

    Java全面細致講解Wrapper的使用

    在封裝中有一種特殊的類,能夠把基本的數(shù)據(jù)類型進行轉(zhuǎn)換來方便實際的使用。我們在之前提到的一些數(shù)據(jù)類型,最明顯的特征是所有字母為小寫狀態(tài),那么經(jīng)過Wrapper的包裝后,首字母就變成了大寫。下面我們就這種特殊的封裝類Wrapper的使用
    2022-05-05
  • idea out目錄與target目錄的區(qū)別詳解

    idea out目錄與target目錄的區(qū)別詳解

    這篇文章主要介紹了idea out目錄與target目錄的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Springboot單元測試編寫實踐

    Springboot單元測試編寫實踐

    在日常的開發(fā)過程中,為了提高代碼的可靠性和健壯性,同時也是檢測代碼的質(zhì)量,減少測試環(huán)節(jié)的問題,會對完成的業(yè)務功能代碼編寫單元測試,在本文中,將分享一些單元測試的實踐和心得,需要的朋友可以參考下
    2023-11-11
  • Java語言的11大特點(Java初學者必知)

    Java語言的11大特點(Java初學者必知)

    Java是一種簡單的,面向?qū)ο蟮?,分布式的,解釋型的,健壯安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線程的靜態(tài)語言。這篇文章主要介紹了Java語言的11大特點,需要的朋友可以參考下
    2020-07-07
  • 輕松掌握Java命令模式

    輕松掌握Java命令模式

    這篇文章主要幫助大家輕松掌握Java命令模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • spring boot與ktor整合的實現(xiàn)方法

    spring boot與ktor整合的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于spring boot與ktor整合的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java中的.concat()方法實例詳解

    Java中的.concat()方法實例詳解

    concat()方法用于將指定的字符串參數(shù)連接到字符串上,.concat()方法是一種連接兩個字符串的簡單方法,可以幫助我們在Java中處理字符串,對java .concat()方法用法感興趣的朋友一起看看吧
    2024-01-01
  • Java反射技術(shù)詳解

    Java反射技術(shù)詳解

    這篇文章主要結(jié)合實例形式分析了介紹了Java反射技術(shù),小編覺得這篇文章寫的還不錯,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • 深入理解mybatis的ParamNameResolver

    深入理解mybatis的ParamNameResolver

    ParamNameResolver是 MyBatis 中的一個重要組件,它為 MyBatis 提供了一種方便的方式來獲取方法參數(shù)的名稱,本文主要介紹了深入理解mybatis的ParamNameResolver,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • springboot實現(xiàn)執(zhí)行sql語句打印到控制臺

    springboot實現(xiàn)執(zhí)行sql語句打印到控制臺

    這篇文章主要介紹了springboot實現(xiàn)執(zhí)行sql語句打印到控制臺的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

勐海县| 中宁县| 应城市| 泰宁县| 阿坝县| 崇左市| 普兰店市| 聊城市| 双鸭山市| 江门市| 德安县| 桐城市| 乌兰浩特市| 肇州县| 汾阳市| 叙永县| 北流市| 平武县| 杭州市| 共和县| 海兴县| 田林县| 温州市| 玉溪市| 赞皇县| 巨野县| 昌图县| 屯昌县| 尼勒克县| 翁牛特旗| 康马县| 威信县| 弥勒县| 镇宁| 广昌县| 康定县| 长治县| 万荣县| 团风县| 新津县| 临高县|