我在一个处理程序中有下面的代码,在提取用户之后,我想用密码更新user对象,我该怎么做,比如下面的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);
}发布于 2017-10-16 18:01:33
从理论上讲,您只需执行以下操作:
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请求。
因此,在这种情况下,您可以在.map编码之前插入一个publishOn(Schedulers.elastic())操作符;这将在一个弹性调度器上调度这些CPU密集型操作(请参阅Reactor reference doc on Schedulers)。
https://stackoverflow.com/questions/46746429
复制相似问题