ワンクリックで
webflux-preauthorize-reactive-return
В WebFlux @PreAuthorize требует Mono/Flux возврат — как обернуть и когда можно без
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
В WebFlux @PreAuthorize требует Mono/Flux возврат — как обернуть и когда можно без
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Динамический LdapTemplate из БД + шифрование пароля + отключение авто-LDAP для безопасного старта без AD
Экспорт Excel с фильтром по датам — использование Thymeleaf inline для передачи дат из формы в JS
Полный цикл синхронизации справочника из Active Directory — сброс структуры, сохранение порядка, блокирующий код в WebFlux
Feature-флаг в БД (app_settings) с UI-тумблером на странице профиля
Парсинг Distinguished Name из Active Directory, извлечение OU-цепочки, правила маппинга на Department/Division и блокирующие вызовы в WebFlux
Разрешение конфликта Spring Data LDAP + R2DBC — strict mode, @Table на все entity, отключение LDAP-репозиториев
| name | webflux-preauthorize-reactive-return |
| description | В WebFlux @PreAuthorize требует Mono/Flux возврат — как обернуть и когда можно без |
| source | auto-skill |
| extracted_at | 2026-06-11T12:55:34.865Z |
При использовании @PreAuthorize в WebFlux-контроллере Spring Security создаёт реактивный прокси, который требует возврат org.reactivestreams.Publisher (Mono/Flux).
java.lang.IllegalStateException: The returnType ... must return an instance of
org.reactivestreams.Publisher (for example, a Mono or Flux) in order to support
Reactor Context
Без @PreAuthorize Spring WebFlux автоматически оборачивает синхронный возврат (List, String) в Mono. Но при добавлении @PreAuthorize включается Security-прокси, который требует явный реактивный тип.
Обернуть возврат в Mono.just() и изменить тип:
// Было — работало без @PreAuthorize:
public List<Map<String, Object>> getUsers() {
return someService.getData();
}
// Стало — для работы с @PreAuthorize:
@PreAuthorize("hasRole('ADMIN')")
public Mono<List<Map<String, Object>>> getUsers() {
return Mono.just(someService.getData());
}
| Ситуация | Возврат |
|---|---|
Без @PreAuthorize | Можно List, String, любой тип |
С @PreAuthorize | Только Mono<T> или Flux<T> |
Метод уже возвращает Mono/Flux | Без изменений |
@GetMapping("/api/something")
@PreAuthorize("hasRole('ADMIN')")
public Mono<ТипОтвета> myMethod() {
return Mono.just(синхронныйВызов());
}
Если внутри ошибка — ловить и возвращать Mono.just(ошибка):
try {
return Mono.just(service.getData());
} catch (Exception e) {
return Mono.just(errorResponse);
}