Вы упоминали в своих комментариях, что с помощью почтальона вы можете получить ответ, как и ожидалось. Это хорошая отправная точка. Я подозреваю, что с помощью команды curl curl -i -X URL
с терминала также возвращает правильный ответ.
Если почтальон работает правильно, вы должны знать, что прямо перед тем, как сделать запрос угловым, отправляется другой запрос, который запрашивает запрос перед полетом, который выполняет минимальную проверку конечной точки на стороне сервера.
Этот запрос является запросом типа ОПЦИИ.
Во-первых, вы должны убедиться, что ваш DispatcherServlet принимает OPTIONS запросы. Вы можете достичь этого либо указав его в файле с *.properties
конфигурации, такие как:
spring.mvc.dispatch-options-request=true
или настроив web.xml
После настройки его принять OPTIONS запросы, создать Filter.java
и настроить фильтр CORS.
Вы можете направлять по следующему примеру:
public class CorsFilter implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
if(response instanceof HttpServletResponse){
HttpServletResponse alteredResponse = ((HttpServletResponse)response);
addCorsHeader(alteredResponse);
}
filterChain.doFilter(request, response);
}
private void addCorsHeader(HttpServletResponse response){
//TODO: externalize the Allow-Origin
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD");
response.addHeader("Access-Control-Allow-Headers", "Authorization, X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept");
response.addHeader("Access-Control-Max-Age", "1728000");
}
@Override
public void destroy() {}
@Override
public void init(FilterConfig filterConfig)throws ServletException{}
}
В конце концов, не забудьте добавить этот фильтр в web.xml
вместе со следующей инициализации-Params.
<filter>
<filter-name>cors-filter</filter-name>
<filter-class>ai.surge.usrmngmtservice.util.cors.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Authorization,Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<!--<init-param>-->
<!--<param-name>cors.preflight.maxage</param-name>-->
<!--<param-value>1800</param-value>-->
<!--</init-param>-->
</filter>
Вы должны быть готовы к работе.
Что такое 'GLOBALS.mismatchUrl'? Я бы предположил, что он не говорит «Недействительный URL» без всякой причины ... –
Плохо, отправил неправильное сообщение об ошибке. – Laurens
вы можете получить ответ в почтальоне? –