springboot 登录密码加密
时间: 2024-10-23 11:20:37 浏览: 23
Spring Boot 中,为了保证用户登录信息的安全,通常会将用户的密码进行加密后再存储。Spring Security 提供了一种便捷的方式来实现这一功能,其中最常用的是 Spring Security 自带的PasswordEncoder 接口。
首先,你需要配置一个 PasswordEncoder 实现,如 DelegatingPasswordEncoder,这可以支持多种加密算法,如 BCrypt 或 Argon2。在 Spring Boot 的配置文件 `application.properties` 或 `application.yml` 中,添加相关配置:
```yaml
spring:
security:
userDetailsService: your.UserDetailsService
passwordEncoder: org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
```
然后在 UserDetailsService 类中,你可以定义一个方法来获取加密后的密码:
```java
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 使用用户名查询数据库,找到用户对象
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found");
}
return new org.springframework.security.core.userdetails.User(
user.getUsername(),
// 使用PasswordEncoder 对密码进行加密
passwordEncoder().encode(user.getPassword()),
AuthorityUtils.createAuthorityList("ROLE_USER")
);
}
}
```
在这里,`passwordEncoder().encode(user.getPassword())` 将用户的原始密码经过编码后再返回。
阅读全文