powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / WebFlux начало работы
7 сообщений из 7, страница 1 из 1
WebFlux начало работы
    #39932751
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разбираюсь с WebFlux возникли трудности когда надо обрабатывать различные условия.
Подскажите направление, правильно ли делаю

1) Проверка на существование. Вообще случае existsByEmail можно заменить на findByEmail но меня интересует работа с Mono<Boolean> Правильно ли сделана логика. Проверка email в БД, если такого email нет, создаем default admin
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
  @Override
  public void afterPropertiesSet() throws Exception {
    log.info("AppInitializator initialization logic ...");
    userService.existsByEmail(ADMIN_EMAIL)
        .filter(exist -> !exist)
        .map(exist -> createAdmin())
        .flatMap(admin -> userService.save(admin))
        .subscribe(user -> log.info("Create default admin [admin: {}]", user)); --данный вызов, чтоб выполнился один раз при старте Spring Boot
  }



2) Как правильно работать с различными Mono в головном. Мне приходит refreshToken - Начинаю парсить его и проверять дату окончания срока (библиотека Nimbus JOSEl) в конце у меня объект SignedJWT. Но далее для работы мне опять нужен токен, чтоб найти его в БД и обновить
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 @Override
  public Mono<SignInResponse> refreshToken(RefreshTokenRequest refreshTokenRequest) {
    return Mono.just(refreshTokenRequest.getRefreshToken())
        .doOnNext(token -> {
          SignedJWT signedJwt = jwtTokenService.checkToken(JwtTokenEnum.JWT_REFRESH_TOKEN, token);
          jwtTokenService.checkExpiration(signedJwt);
-- удалить запись из коллекции (refreshTokenRepository.deleteByToken(token)
        })
        .flatMap(token -> refreshTokenRepository.findRefreshTokenEntityByRefreshToken(token))
        .filter(Objects::nonNull)
        .flatMap(refreshTokenEntity -> userService.findById(refreshTokenEntity.getId()))
-- удалить запись из коллекции
-- удалить запись из коллекции (refreshTokenRepository.deleteByToken(token)
        .flatMap(this::generateTokens);
  }
...
Рейтинг: 0 / 0
WebFlux начало работы
    #39932761
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

что-то вы странное делаете:
- писать в базу в afterPropertiesSet() - это так себе затея, тут в лиснере ловить ContextStartedEvent куда лучше
- делать обновление токенов асинхронным - это чет тоже так себе затея, у вас же клиент без обновленного токена работать нормально не может, а вы достаточно короткую операцию хотите запихнуть в общую очередь обработки
...
Рейтинг: 0 / 0
WebFlux начало работы
    #39932793
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Мне тоже кажется, что работа с аутентификацией делается Синхронно.
Значит WebFlux идет лесом.
...
Рейтинг: 0 / 0
WebFlux начало работы
    #39932856
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня еще даже проблема не в коде
А не могли б подробно объяснить нюанс с токеном и асинхроностью
...
Рейтинг: 0 / 0
WebFlux начало работы
    #39932894
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Твой код из головы или на основе примера? Ссылка?
...
Рейтинг: 0 / 0
WebFlux начало работы
    #39933384
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это мой код.. Просто есть вопросы

Как работь с if else then
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
      log.info("ContextRefreshedEvent Initialization logic ...");
      userService.findByEmail(ADMIN_EMAIL)
          .switchIfEmpty(Mono.just(createAdmin()))
          .flatMap(admin -> userService.save(admin))
          .subscribe(user -> log.info("Create default admin [admin: {}]", user));
    }

  @Override
  public void afterPropertiesSet() throws Exception {
    log.info("AppInitializator initialization logic ...");
    userService.existsByEmail(ADMIN_EMAIL)
        .filter(exist -> !exist)
        .map(exist -> createAdmin())
        .flatMap(admin -> userService.save(admin))
        .subscribe(user -> log.info("Create default admin [admin: {}]", user)); --данный вызов, чтоб выполнился один раз при старте Spring Boot
  }



Если пользователь найден ничего не делать, если не найден создать нового
В первом примере Mono<Boolean> - findByEmai
Во втором примере Mono<User> - findById

То есть если какое-то условие не срабатывает просто выйти, а не гнать всю цепочку до конца
...
Рейтинг: 0 / 0
WebFlux начало работы
    #39933404
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Как работь с if else then
никак.
Реактивное программирование для Потока данных распределенных во времени.
Понятно?
Нет потока - нет реакивному программированию.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / WebFlux начало работы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]