Проблема предварительной проверки Apache Solr Options - PullRequest
0 голосов
/ 22 ноября 2018

Я использую 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);
}

Мне интересно, это единственный способ сделать это, иначе есть ли другой способ сделать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...