Недавно столкнулся с этой проблемой и нашел решение для нее.
Что происходит, когда вы отправляете запрос из разных источников, в моем случае с браузером, запрос 'preflight' отправляется на тот же URL-адрес, но с методом OPTIONAL
http и некоторыми заголовками ( исключая те, которые вы добавили, следовательно, они отсутствуют).
Ваша конфигурация Spring Security запрещает авторизацию для этого предварительного запроса, потому что он был настроен таким образом (непреднамеренно естественно), и вы получите ответ 403.
Это обсуждалось здесь как проблема, благодаря которой я нашел это решение chuan-su .
[РЕДАКТИРОВАТЬ] Найден ТАК вопрос Роберта Шмидта , который начал обсуждение, связанное выше.
В основном вам нужно соединить cors().and()
до http
в вашей конфигурации безопасности Spring и изменить конфигурацию CORS следующим образом
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*") //possibly redundant
.allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH")
// which ever methods you will be using
.allowedHeaders("Authorization", "Cache-Control", "Content-Type")
// headers that you will be adding to your requests
.allowCredentials(true);
}
Если вы конфигурируете CORS путем внедрения CorsConfigurationSource @Bean, chuan-su упомянул его настройку в своем решении вместе с методом, приведенным выше. Смотрите ссылку.
[РЕДАКТИРОВАТЬ] Ссылка на другой ответ, который чище подход в соответствии с самим постом. Хотя не пробовал, но похоже, что это сработает.