SpringSecurity使用PasswordEncoder加密用户密码的示例代码
1. 导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2. 配置 PasswordEncoder
在配置类中创建一个 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) { //需要先查询是否已经存在相同用户名 // 创建条件构造器 QueryWrapper<Resuser> queryWrapper = new QueryWrapper<>(); // 添加条件:用户名 queryWrapper.eq("username", user.getUsername()); if (resUserMapper.selectOne(queryWrapper) != null) { // 已经存在相同用户名 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(); } }
测试加密情况:
可能出现的问题:
我在测试的时候报了MysglDataTruncation
错误,提示Data truncation: Data too long for column 'pwd' at row 1
(如下图),提示了密码长度过长。
这是因为 数据库中 pwd 字段长度为 50,而BCryptPasswordEncoder生成的加密密码长度通常为 60 个字符的字符串,所以出现了长度过长的错误。
解决:修改数据库字段长度。
ALTER TABLE your_table MODIFY COLUMN pwd VARCHAR(255);
4. 使用 PasswordEncoder 验证用户密码
在登录时,使用 PasswordEncoder 的matches("明文", "密文")
对比用户输入的密码和数据库中存储的加密后的密码是否匹配。
@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; }
到此这篇关于SpringSecurity使用PasswordEncoder加密用户密码的示例代码的文章就介绍到这了,更多相关SpringSecurity PasswordEncoder加密密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot+Redis执行lua脚本的5种方式总结
Lua是一种快速、轻量级的脚本语言,广泛应用于各种领域,包括数据库,Redis作为一个内嵌Lua解释器的NoSQL数据库,允许通过Lua脚本在服务器端执行一些复杂的操作,本文给大家介绍了使用SpringBoot Redis执行lua脚本的五种方式,需要的朋友可以参考下2023-11-11关于mybatis遇到Integer类型的参数时动态sql需要注意条件
这篇文章主要介绍了关于mybatis遇到Integer类型的参数时动态sql需要注意条件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03mybatis查询返回Map<String,Object>类型的讲解
这篇文章主要介绍了mybatis查询返回Map<String,Object>类型的讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06
最新评论