Сохранение различных типов вниз по течению для разных операторовJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сохранение различных типов вниз по течению для разных операторов

Сообщение Anonymous »

Помогите мне решить эту головоломку с реактором проекта.
В основном два оператора нуждаются в разных типах, я, казалось бы, не могу сохранить их как вниз по течению. Тем не менее, это кажется сомнительным с точки зрения дизайна.UserDto, user , usersvive , userauthenticationtoken -это пользовательские, но не относящиеся к нему типам, поэтому я не буду их включать.import org.springframework.security.authentication.ReactiveAuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.security.crypto.password.PasswordEncoder;
import reactor.core.publisher.Mono;

import java.util.Optional;

public class UserReactiveAuthenticationManager implements ReactiveAuthenticationManager {

private final UserService userService;
private final PasswordEncoder passwordEncoder;

private UserReactiveAuthenticationManager(UserService userService, PasswordEncoder passwordEncoder) {
this.userService = userService;
this.passwordEncoder = passwordEncoder;
}

public static UserReactiveAuthenticationManager of(UserService userService, PasswordEncoder passwordEncoder) {
return new UserReactiveAuthenticationManager(userService, passwordEncoder);
}

@Override
public Mono authenticate(Authentication authentication) {
return Mono.just(authentication.getPrincipal())
.ofType(UserDto.class)
.filter(this::matchesExistingUser) // needs DTO
.map(UserAuthenticationToken::from); // needs User, but loaded User no longer in scope, doesn't compile
}

private boolean matchesExistingUser(UserDto userDto) {
Optional userOptional = userService.find(userDto); // DB call
if (userOptional.isEmpty()) return false;
User user = userOptional.get();
return passwordEncoder.matches(userDto.getPassword(), user.getPassword());
}
}
< /code>
Вот сомнительное решение, которое я упомянул: < /p>
@Override
public Mono authenticate(Authentication authentication) {
return Mono.just(authentication.getPrincipal())
.ofType(UserDto.class)
.map(AuthenticationContext::from)
.filter(this::matchConfirmed)
.map(AuthenticationContext::getUser)
.map(UserAuthenticationToken::from);
}

private boolean matchConfirmed(AuthenticationContext authenticationContext) {
UserDto userDto = authenticationContext.getUserDto();
Optional userOptional = userService.find(userDto);
if (userOptional.isEmpty()) return false;
User user = userOptional.get();
authenticationContext.setUser(user); // cares about downstream operator, that's nice of them
return passwordEncoder.matches(userDto.getPassword(), user.getPassword());
}

@Setter
@Getter
private static class AuthenticationContext {

UserDto userDto;
User user;

static AuthenticationContext from(UserDto userDto) {
AuthenticationContext authenticationContext = new AuthenticationContext();
authenticationContext.setUserDto(userDto);
return authenticationContext;
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... -operators
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сохранение различных типов вниз по течению для разных операторов
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Личность: распространяющая претензии вниз по течению услуг
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Parallelflux - параллельное выполнение с несколькими вызовами API вниз по течению
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Как правильный способ сделать HTTP -запросы вниз по течению внутри Uvicorn/Fastapi?
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Отказ получения токенов с приложением API вниз по течению - .NET 9 AKS
    Anonymous » » в форуме C#
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»