Запрос OPTIONS запрещен в Spring Boot

Я прочитал много потоков и решений по этой проблеме (включая это решение SO), но у меня все еще есть ошибка 403, когда отправка предварительных запросов.

Я использую Spring Data Rest и могу хорошо работать со своими репозиториями, пока не отправлены ОПЦИИ. Я пока не использую Spring Security, но планирую настроить его в ближайшее время. Вот моя текущая конфигурация:

@Configuration
public class GlobalRepositoryRestConfigurer extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.getCorsRegistry().addMapping("/**").allowedOrigins("*").allowedHeaders(
                "*").exposedHeaders("Location").allowedMethods("GET", "PUT", "POST", "DELETE",
                                                               "OPTIONS");
    }

    @Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
    public DispatcherServlet dispatcherServlet() {
        DispatcherServlet dispatcher = new DispatcherServlet();
        dispatcher.setDispatchOptionsRequest(true);
        return dispatcher;
    }
}

Я также попробовал вариант application.properties и установил для allowedMethods значение "*" , но в итоге я получил 403, несмотря ни на что. Ниже приведены заголовки запроса/ответа, которые я получил от запроса OPTIONS.

Заголовки запроса

Accept           text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding  gzip, deflate
Accept-Language  fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Access-Control-Request-Headers   content-type
Access-Control-Request-Method    POST
Connection       keep-alive
Host             localhost:8080
Origin           http://localhost:4000
Referer          http://localhost:4000/
User-Agent       Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/64.0

Заголовки ответов

Allow            GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH
Content-Length   20
Date             Sun, 30 Dec 2018 08:49:00 GMT

Вы видите что-то неправильное или что-то еще, что я мог бы попробовать?


person Carrm    schedule 30.12.2018    source источник
comment
я думаю, что ваша corsconfiguration переопределена где-то еще в вашем приложении, можете ли вы это проверить?   -  person stacker    schedule 30.12.2018
comment
Нет другого места, где конфигурация CORS явно определена, как вы думаете, может ли это быть какая-то конфигурация Spring по умолчанию? Как я могу это проверить? В любом случае, я уже убедился, что allowMethods работает (существует несоответствие между заголовками conf и ответов, которые я опубликовал, но я думаю, что я скопировал запрос, сделанный с моей предыдущей conf, в которой было разрешено больше методов), а также exposeHeaders.   -  person Carrm    schedule 31.12.2018


Ответы (1)


Я до сих пор не знаю, почему моя конфигурация не работала для запросов OPTIONS, но мне удалось заставить ее работать с WebMvcConfigurer. Вот класс конфигурации, который решил мою проблему:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedOrigins("*")
                .allowedHeaders("*")
                .exposedHeaders("Location", "Access-Control-Allow-Origin");
    }
}
person Carrm    schedule 12.01.2019
comment
Не работает в моем случае, может быть другая причина в моем случае - person Marian Klühspies; 16.12.2019
comment
См. stackoverflow.com/questions/40009719/ - person LeslieM; 01.07.2020