Запрос опции CORS заблокирован пользовательским фильтром JWE в Spring Boot - PullRequest
0 голосов
/ 26 марта 2020

Проблема

Запрос CORS OPTIONS из браузера входит в мой фильтр проверки JWT и возвращает 401 при каждом запросе. Я ожидал, что запрос CORS OPTIONS будет обработан перед входом в фильтр проверки JWT.

Фон

В моем приложении для весенней загрузки я создал фильтр JWT (который реализует фильтр), который перехватывает каждый запрос , Задача только фильтров состоит в том, чтобы проверить токен и выдать 401, если токен истек, имеет неверную подпись или неверные утверждения и перенаправить запрос следующему фильтру в цепочке, если токен действителен.

@Component
@Order(1)
public class JweFilter implements Filter {

  @Override
  doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {

    // Validate Token and return 401 if invalid

    chain.doFilter(request, response);

  }

}

Я включил CORS, расширив WebMvcConfigurer - что кажется современным подходом.

@Configuration
@EnableWebMvc
class CorsConfig implements WebMvcConfigurer {

  @Override
  public void addCorsMappings(CorsRegistry registry) {

    registry.addMapping("/**")
      .allowedHeaders("*")
      .allowedMethods("*");
  }
}

Кто-нибудь знает, почему у меня такое поведение и как его исправить?

Спасибо заранее всем, кто имеет информацию:)

1 Ответ

0 голосов
/ 26 марта 2020

Чтобы устранить проблему, я избавился от WebMvcConfigurer и заменил его на FilterRegistrationBean https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#filter -based-cors-support

@Configuration
public class MyConfiguration {

    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://domain1.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

С этим кодом на месте CORS запрос предпечатной проверки был обработан FilterRegistrationBean перед выполнением фильтра проверки JWT.

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