HttpHostConnectException в фильтре Zuul - PullRequest
0 голосов
/ 29 января 2019

Я использую SpringBoot 2.0.3, spring-cloud-starter-netflix-zuul и cloud Finchley.RELEASE.У меня есть следующий класс, который добавляет headers:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
class CorsRequestIdFilter extends OncePerRequestFilter {

    private static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
            FilterChain filterChain) throws ServletException, IOException {

        if (isCorsRequest(request) && isPreFlightRequest(request)) {

            Set<String> headers = new HashSet<>();
            headers.add("Authorization");
            headers.add("X");

            String requestHeader = request.getHeader("Access-Control-Request-Headers");
            if (requestHeader != null) {
                headers.addAll(Arrays.asList(requestHeader.split(",")));
            }

            response.addHeader("Access-Control-Allow-Origin", "*");
            response.addHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
            response.addHeader("Access-Control-Max-Age", "3600");
            response.addHeader("Access-Control-Allow-Headers", join(",", headers));

            return;
        }

        filterChain.doFilter(request, response);
    }

    private boolean isCorsRequest(HttpServletRequest request) {
        return (request.getHeader(HttpHeaders.ORIGIN) != null);
    }

    private boolean isPreFlightRequest(HttpServletRequest request) {
        return (isCorsRequest(request) && request.getMethod().equals(HttpMethod.OPTIONS.name()) &&
                request.getHeader(ACCESS_CONTROL_REQUEST_METHOD) != null);
    }

}

Netflix-стартер дает мне spring-cloud-netflix-zuul в версии 2.0.0.Я нашел эту проблему https://github.com/spring-cloud/spring-cloud-netflix/issues/3033

У меня есть похожая проблема, чтобы быть точной, только эта часть соответствует:

com.netflix.zuul.exception.ZuulException: Filter threw Exception
(...)
Caused by: java.lang.ClassCastException: org.apache.http.conn.HttpHostConnectException cannot be cast to com.netflix.zuul.exception.ZuulException
    at org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter.findZuulException(SendErrorFilter.java:104)
    at org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter.run(SendErrorFilter.java:73)
    at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:117)
    at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193)
    ... 107 common frames omitted

, но я понятия не имею, как это помогает мне.Мне интересно, почему возникает эта ошибка и что я могу сделать, чтобы она исчезла?

Я на мгновение изменил версию spring-cloud-starter-netflix-zuul на 2.0.1, но это не помогло бы мне вообще.

...