В проекте, где мы используем Spring Boot 2, стартеры + Spring 5.0.7 + Reactor (WebFlux), мы хотели бы реализовать безопасность с помощью Spring Security. Просто включив стартер:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
И фасоль:
@Bean
SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) throws Exception {
return http.authorizeExchange()
.anyExchange().authenticated()
.and().build();
}
более чем достаточно.
Однако мы хотели бы использовать токены JWT (сгенерированные другой стороной, на сервере ресурсов) для перехвата этих заголовков Authorization. Я боролся с этим, и я не смог найти ни одного примера для Spring 5 (тогда как для Spring <5 есть много примеров и руководств).
Кто-нибудь сталкивался с этой проблемой?




29 августа вышла новая версия Spring: 5.1. Эта версия устраняет эту проблему. Коммит реализует это это. Пример использования можно проверить здесь.
Я сделал демонстрационный проект с полной реализацией JWT, используя только jjwt lib, он находится в github.com/eriknyk/webflux-jwt-security-demo
Вы можете проверить medium.com/@ard333/…. Основная идея - установить в ваш springWebFilterChain два дополнительных bean-компонента: securityContextRepository и authenticationManager. SecurityContextRepository - это основное место для обработки вашего JWT (синтаксический анализ, проверка ...), а AuthenticationManager - это всего лишь простая проверка, чтобы пометить запрос как аутентифицированный, по крайней мере, я могу это видеть.