SpringSecurity使用PasswordEncoder加密用戶密碼的示例代碼
1. 導(dǎo)入依賴
<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 對象,在注冊用戶時對密碼進(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()); // 對密碼進(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(); } }
測試加密情況:
可能出現(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 Mybatis架構(gòu)設(shè)計深入了解
在本篇文章里小編給大家整理的是一篇關(guān)于Java Mybatis架構(gòu)設(shè)計詳解內(nèi)容,對此有興趣的朋友們可以參考下,希望能夠給你帶來幫助2021-11-11Java?Float?保留小數(shù)位精度的實現(xiàn)
這篇文章主要介紹了Java?Float?保留小數(shù)位精度的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12spring boot如何使用AOP統(tǒng)一處理web請求
這篇文章主要介紹了spring boot如何使用AOP統(tǒng)一處理web請求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12SpringBoot使用Mybatis注解實現(xiàn)分頁動態(tài)sql開發(fā)教程
這篇文章主要為大家介紹了SpringBoot使用Mybatis注解實現(xiàn)分頁及動態(tài)sql開發(fā)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03mybatis的insert語句插入數(shù)據(jù)時的返回值的實現(xiàn)
這篇文章主要介紹了mybatis的insert語句插入數(shù)據(jù)時的返回值的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10SpringBoot中實現(xiàn)Druid前端監(jiān)控界面自動登錄功能
這篇文章主要介紹了SpringBoot中實現(xiàn)Druid前端監(jiān)控界面自動登錄功能,需要的朋友可以參考下2024-08-08