У меня есть перехватчик:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor());
}
Могу ли я добавить свою конфигурацию CORS в RequestInterceptor.java выше? Как это:
public class RequestInterceptor extends HandlerInterceptorAdapter
{
...
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
...
...
if (request.getMethod().equals("OPTIONS")) {
response.setHeader("Access-Control-Allow-Origin", "http://localhost:9090");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
response.setHeader("Access-Control-Expose-Headers", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Max-Age", "4800");
}
...
return true;
}
}
Я не хочу ни одного из этих методов, потому что по какой-то причине они не работают для меня:
@CrossOrigin
OR
WebMvcConfigurerAdapter -> addCorsMapping()
Единственное, что работает для меня, это наличие CORSFilter и отображение его в web.xml. Но это заставило меня задуматься о том, что перехватчики тоже своего рода фильтр, не так ли? Тогда зачем добавлять фильтр И перехватчик, когда сам перехватчик будет делать.
В любом случае, я пытался использовать приведенный выше фрагмент кода, и мои запросы приземляются на сервере, а метод остальных контроллеров запущен, но я вижу этот ответ на моей странице ReactJs:
SEC7120: Origin http://localhost:9090 not found in Access-Control-Allow-Origin header.
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
Что мне не хватает? Есть ли что-то еще, что я должен сделать в классе RequestInterceptor.java для CORS?
Спасибо.