Spring Data Rest 用户仓库 BCCrypt 密码
Spring Data Rest user repository BCCrypt password
我有一个 spring 数据剩余自定义用户存储库,其中的密码需要使用 BCCrypt 加密。从 UI 我发送普通密码,我想知道在休眠在数据库中创建用户之前在哪里将普通密码转换为 BCCrypt 哈希。我应该在保存拦截器之前使用并散列密码吗?或者有什么方法可以告诉 spring 使用密码编码器?
您需要在 Registration-Service
中执行此操作,如下所示:
@Autowired
private BCryptPasswordEncoder passwordEncoder;
...
public void registerUser(final User user)
{
final String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
userRepo.save(user);
}
我推荐给你的密码编码器,是org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
这个编码器自动为你生成盐。
在 Spring Data Rest 中拦截插入的方法是使用事件处理程序。
注意:此代码不适用于不包含密码字段的 PATCH 操作。
@Component
@RepositoryEventHandler(User.class)
public class UserEventHandler {
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@Autowired
private UserRepository userRepository;
@HandleBeforeCreate
public void handleUserCreate(User user) {
user.setPassword(passwordEncoder.encode(user.getPassword()));
}
@HandleBeforeSave
public void handleUserUpdate(User user) {
if (user.getPassword() == null || user.getPassword().equals("")) {
//keeps the last password
User storedUser = userRepository.getOne(user.getId());
user.setPassword(storedUser.getPassword());
}
else {
//password change request
user.setPassword(passwordEncoder.encode(user.getPassword()));
}
}
}
我有一个 spring 数据剩余自定义用户存储库,其中的密码需要使用 BCCrypt 加密。从 UI 我发送普通密码,我想知道在休眠在数据库中创建用户之前在哪里将普通密码转换为 BCCrypt 哈希。我应该在保存拦截器之前使用并散列密码吗?或者有什么方法可以告诉 spring 使用密码编码器?
您需要在 Registration-Service
中执行此操作,如下所示:
@Autowired
private BCryptPasswordEncoder passwordEncoder;
...
public void registerUser(final User user)
{
final String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
userRepo.save(user);
}
我推荐给你的密码编码器,是org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
这个编码器自动为你生成盐。
在 Spring Data Rest 中拦截插入的方法是使用事件处理程序。
注意:此代码不适用于不包含密码字段的 PATCH 操作。
@Component
@RepositoryEventHandler(User.class)
public class UserEventHandler {
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@Autowired
private UserRepository userRepository;
@HandleBeforeCreate
public void handleUserCreate(User user) {
user.setPassword(passwordEncoder.encode(user.getPassword()));
}
@HandleBeforeSave
public void handleUserUpdate(User user) {
if (user.getPassword() == null || user.getPassword().equals("")) {
//keeps the last password
User storedUser = userRepository.getOne(user.getId());
user.setPassword(storedUser.getPassword());
}
else {
//password change request
user.setPassword(passwordEncoder.encode(user.getPassword()));
}
}
}