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

