Фильтрация шаблонов URL в Spring Webflux WebFilterChain - PullRequest
1 голос
/ 10 июня 2019

Я пытаюсь написать фильтр в Spring Webflux, но не могу найти вариант применения фильтра только к определенным шаблонам URL.В мире Spring MVC это может быть достигнуто с помощью

FilterRegistrationBean.addUrlPatterns("/protected/*");

Но я не могу найти эквивалент для него в мире webflux.

В качестве обходного пути я использую следующее, но это, очевидно, не правильный способ сделать это

String path = serverWebExchange.getRequest().getURI().getPath();
if(path.contains("/protected/"))
<do-something>

Есть ли в WebFilterChain какой-либо собственный метод сопоставления с образцом URL-адреса Spring Webflux, который я могу использовать, чтобы применить фильтр только к определенному набору URL-адресов??Спасибо!

1 Ответ

1 голос
/ 11 июня 2019

Webflux и Spring MVC - это не одно и то же, поэтому нельзя ожидать, что в обеих библиотеках будут одинаковые функции.

Если вы загляните в класс CorsWebFilter в webflux, вы увидите, что они реализовали путь, регистрируя себя.

Они задают путь в UrlBasedCorsConfigurationSource, а затем при этом используют PathPatternParser для регистрации конфигураций для каждого пути.

/**
 * Register a {@link CorsConfiguration} for the specified path pattern.
 */
public void registerCorsConfiguration(String path, CorsConfiguration config) {
    this.corsConfigurations.put(this.patternParser.parse(path), config);
}

Регистрация фильтра cors:

@Bean
public CorsWebFilter corsWebFilter() {
    final CorsConfiguration config = new CorsConfiguration();

    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", config);

    return new CorsWebFilter(source);
}

так что то, что вы ищете, не существует специально, но, взглянув на код Spring, вы сможете увидеть, что они делают, и создать нечто подобное, соответствующее вашим потребностям.

Другой вариант - зарегистрировать фильтр только на конечных точках, на которых вы хотите, чтобы он был активен, с помощью Routerfunction::filter и реализации HandlerFilterFunction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...