Я использую solr прямо из углового и столкнулся с перекрестной проблемой.Я решил эту проблему, добавив перекрестный фильтр
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,OPTIONS,DELETE,PUT,HEAD</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>origin, content-type, accept</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
, но когда я нажал на solr с сообщением с телом запроса, его параметры запуска prefligh и сообщение об ошибке сообщают «missign content stream», позже обнаружил, что preflight параметров не обрабатывается должным образомпоэтому я добавил свой собственный фильтр
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
logger.info("Options Filter executed");
HttpServletRequest request = (HttpServletRequest) servletRequest;
System.out.println("CORSFilter HTTP Request: " + request.getMethod());
((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Headers", "*");
((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Origin", "*");
((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Methods","GET, OPTIONS, HEAD, PUT, POST");
HttpServletResponse resp = (HttpServletResponse) servletResponse;
if (request.getMethod().equals("OPTIONS")) {
logger.info("Options request is handled and responded ok");
resp.setStatus(HttpServletResponse.SC_ACCEPTED);
return;
}
chain.doFilter(request, servletResponse);
}
Мне интересно, это единственный способ сделать это, иначе есть ли другой способ сделать это