我在Handler中有以下代码,在解压缩用户后我想用密码更新用户对象 我如何做以下的事情 user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
public Mono<ServerResponse> saveUser(ServerRequest request)
{
Mono<User> user = request.bodyToMono(User.class);
// How to Set the Password to user
**//user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));**
return ServerResponse.ok().body(this.userRepository.insert(user), User.class);
}
答案 0 :(得分:2)
理论上,您可以执行以下操作:
public Mono<ServerResponse> saveUser(ServerRequest request) {
Mono<User> user = request.bodyToMono(User.class)
.map(user -> user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())));
return ServerResponse.ok().body(this.userRepository.insert(user), User.class);
}
但这可以看作具体的用例;我认为密码编码器设计为CPU密集型,并且出于安全考虑需要一些时间。不建议在Web交换管道上执行昂贵的CPU操作,因为您的应用程序不能很好地扩展:分配用于处理请求的少数线程将忙于执行身份验证和处理HTTP请求。
因此,在这种情况下,您可以在publishOn(Schedulers.elastic())
编码之前使用.map
运算符;这将在弹性调度程序上安排这些CPU密集型操作(请参阅Reactor reference doc on Schedulers)。