Springboot использует фильтр для получения пользовательских заголовков запросов

Java

предисловие

Есть проект кошелька, в котором изначально использовался набор микросервисов, позже я счел его ненужным и переделал в простой springboot проект, но после рефакторинга проверки токена возникла проблема, перед написанием фильтра использовал springgateway , который основан на GatewayFilter.Реализация, основанная на фильтре после рефакторинга, а затем при попадании запроса в фильтр обнаруживается, что не удается получить пользовательский заголовок запроса.

String token = request.getHeader("token"); // null
String id = request.getHeader("id"); // null
String role = request.getHeader("role"); // null

причина

Я проверил servletRequest, когда вошел в точку останова, и обнаружил, что метод запроса — это параметры. Я знаю, получить сообщение удалить поставить. Я действительно не разбираюсь в вариантах, поэтому Baidu посмотрел.В основном ссылайтесь на эту статью. Оказалось, что это проблема политики одного и того же происхождения браузера, то есть cors, но, если подумать, я настроил cors.

@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1
        corsConfiguration.addAllowedHeader("*"); // 2
        corsConfiguration.addAllowedMethod("*"); // 3
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig()); // 4
        return new CorsFilter(source);
    }
}

Почему я все еще сообщаю о междоменной проблеме?Я вспомнил, что, поскольку я не мог получить токен заголовка запроса в своем tokenFilter, я выдал исключение параметра, а затем @RestControllerAdvice и @ExceptionHandle не смогли обработать исключение, выброшенное в фильтре, в результате чего программа сообщает об ошибке 500, а затем фильтр аналогичен аспекту, здесь он сломан, и заголовок возврата не добавляется.

иметь дело с

Как быть с запросом опций препроцессинга, отправленным браузером, это слишком лениво, поэтому я написал это так

HttpServletRequest request= (HttpServletRequest)servletRequest;
        HttpServletResponse res = (HttpServletResponse) servletResponse;
        String method=request.getMethod();
        if(HttpMethod.OPTIONS.toString().equals(method)){
            res.setStatus(HttpStatus.NO_CONTENT.value());
        }else {
            String token = request.getHeader("token");
            String id = request.getHeader("id");
            String role = request.getHeader("role");
            ~~~~~~~

отзывать

Я помню, что не обрабатывал запрос опций в своем последнем проекте, почему я не сообщил о проблеме с cors, кстати, я помню, что обрабатывал это в nginx.

if ($request_method = 'OPTIONS') {
  return 204;
}
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, PATCH, DELETE, HEAD" always;
add_header Access-Control-Max-Age 86400 always;

Получается, что я написал и фронтенд и бэкенд, как мне еще столкнуться с этими проблемами?😌, их написали старшие, а я пока не сталкивался с проблемами, и не углублялся в них, и почему corsWebFilter в springcloud похож на springboot?Внутренний corsFilter отличается.

@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");

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

        return new CorsWebFilter(source);
    }
}

Мне все еще нужно посмотреть исходный код, я crudboy