У меня есть работающий компонент @RestController, который выдает веб-конечные точки API.
Это одна из этих конечных точек
@CrossOrigin
@GetMapping(API_VERSION + PLAYER + METHOD_FETCH + "/{uid:^[0-9]*$}")
public Player fetchPlayer(@PathVariable("uid") String uid) {
return mongoTemplate.findById(uid, Player.class);
}
Теперь при использовании моего приложения Vue.js я вызываю эту конечную точку.Проблема заключается в том, что клиентская библиотека axios
http превращает запрос get , имеющий заголовки аутентификации, в запрос options для проверки сервера на фактический доступ.
Теперь янеобходимо использовать этот запрос options и включить его для CORS .Поэтому я сделал следующее:
@RestController
@Log
@RequestMapping("/**")
public class AuthenticationEndpoint {
@CrossOrigin
@RequestMapping(method = RequestMethod.OPTIONS)
public void handleOptionRequest(){
log.info("option request handled");
}
}
Я сопоставляю его с каждым URL, чтобы он "должен" перехватывать каждый запрос OPTIONS.Но это не так.При наличии
GET http://{{host}}:80/api/v0.1/player/fetch/4607255831
Authorization: Basic MTIzNTM2NDMyNDphYmMxMjM=
Более конкретная веб-конечная точка API обрабатывается до обработчика OPTIONS.Как я могу на самом деле поместить обработчик OPTIONS перед другими в Spring MVC?Я хочу, чтобы он действовал как перехватчик
ИЛИ
Каков наилучший способ достижения желаемого поведения?Я чувствую, что пытаюсь найти лучшее решение.