Сбой запроса Axios DELETE только в браузере с 403 «Неверный запрос CORS» в качестве ответа - PullRequest
0 голосов
/ 07 ноября 2019
  1. Я использую vue в передней части и пружинный чехол в задней части.

  2. Я использовал axios, чтобы сделать серверный вызов из кода VUE.

  3. Все было в порядке с GET, POST-запросами.

  4. При попытке выполнить запрос DELETE произошел сбой со статусом 403, а ответ об ошибке - Invalid CROS request.

  5. Но тот же самый запрос DELETE работает в POSTMAN

Я пробовал следующее решение, упомянутое в другом посте, и оно непомогите мне 1. добавил withCredentials: true в заголовке запроса

добавлены заголовки: {'X-Requested-With': 'XMLHttpRequest', 'X-CSRFToken': 'ваш токен здесь'}

3.добавлена ​​аннотация @CrossOrigin в DELETE api

Вот так я и создал экземпляр axios

const token = localStorage.token;

const instance = axios.create({
  baseURL: "/",
  headers: {
    Authorization: token
  }
});

делая запрос, как показано ниже

instance.delete(`/user/${username}`);

Выдает 403 Invalid CROS Request как ответ, а его нетпопав на сервер API тоже

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Сработало после удаления фрагмента кода из файла конфигурации безопасности Spring, который добавляет кросс-конфигурацию по умолчанию

@Beanpublic CorsConfigurationSource corsConfigurationSource() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());

        return source;
    }

Метод applyPermitDefaultValues ​​CorsConfiguration добавляет только методы GET, POST, HEAD

0 голосов
/ 07 ноября 2019
You need to allow methods also 

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer 
{  
   @Override
  public void addCorsMappings(CorsRegistry registry) 
  {


      registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST","PUT", "DELETE");
  }

}

или если вы настраиваете на уровне контроллера и метода

@Controller
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class HomeController 
{
    @CrossOrigin(origins = "http://example.com")
    @DeleteMapping("/{username}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void deleteUserByUsername(@PathVariable("username") String username) 
    { 
      User user= userRepository.findByUsername(username); 
      userRepository.delete(user); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...