Search in sources :

Example 1 with ZuulFilter

use of com.netflix.zuul.filters.ZuulFilter in project zuul by Netflix.

the class ZuulFilterChainHandler method fireEndpointFinish.

protected void fireEndpointFinish(final boolean error) {
    final ZuulFilter endpoint = ZuulEndPointRunner.getEndpoint(zuulRequest);
    if (endpoint instanceof ProxyEndpoint) {
        final ProxyEndpoint edgeProxyEndpoint = (ProxyEndpoint) endpoint;
        edgeProxyEndpoint.finish(error);
    }
    zuulRequest = null;
}
Also used : ZuulFilter(com.netflix.zuul.filters.ZuulFilter) ProxyEndpoint(com.netflix.zuul.filters.endpoint.ProxyEndpoint)

Example 2 with ZuulFilter

use of com.netflix.zuul.filters.ZuulFilter in project zuul by Netflix.

the class BaseZuulChannelInitializer method addZuulFilterChainHandler.

protected void addZuulFilterChainHandler(final ChannelPipeline pipeline) {
    final ZuulFilter<HttpResponseMessage, HttpResponseMessage>[] responseFilters = getFilters(new OutboundPassportStampingFilter(FILTERS_OUTBOUND_START), new OutboundPassportStampingFilter(FILTERS_OUTBOUND_END));
    // response filter chain
    final ZuulFilterChainRunner<HttpResponseMessage> responseFilterChain = getFilterChainRunner(responseFilters, filterUsageNotifier);
    // endpoint | response filter chain
    final FilterRunner<HttpRequestMessage, HttpResponseMessage> endPoint = getEndpointRunner(responseFilterChain, filterUsageNotifier, filterLoader);
    final ZuulFilter<HttpRequestMessage, HttpRequestMessage>[] requestFilters = getFilters(new InboundPassportStampingFilter(FILTERS_INBOUND_START), new InboundPassportStampingFilter(FILTERS_INBOUND_END));
    // request filter chain | end point | response filter chain
    final ZuulFilterChainRunner<HttpRequestMessage> requestFilterChain = getFilterChainRunner(requestFilters, filterUsageNotifier, endPoint);
    pipeline.addLast(new ZuulFilterChainHandler(requestFilterChain, responseFilterChain));
}
Also used : OutboundPassportStampingFilter(com.netflix.zuul.filters.passport.OutboundPassportStampingFilter) HttpResponseMessage(com.netflix.zuul.message.http.HttpResponseMessage) HttpRequestMessage(com.netflix.zuul.message.http.HttpRequestMessage) ZuulFilterChainHandler(com.netflix.zuul.netty.filter.ZuulFilterChainHandler) ZuulFilter(com.netflix.zuul.filters.ZuulFilter) InboundPassportStampingFilter(com.netflix.zuul.filters.passport.InboundPassportStampingFilter)

Example 3 with ZuulFilter

use of com.netflix.zuul.filters.ZuulFilter in project zuul by Netflix.

the class ZuulFilterChainRunnerTest method testInboundFilterChain.

@Test
public void testInboundFilterChain() {
    final SimpleInboundFilter inbound1 = spy(new SimpleInboundFilter(true));
    final SimpleInboundFilter inbound2 = spy(new SimpleInboundFilter(false));
    final ZuulFilter[] filters = new ZuulFilter[] { inbound1, inbound2 };
    final FilterUsageNotifier notifier = mock(FilterUsageNotifier.class);
    final Registry registry = mock(Registry.class);
    final ZuulFilterChainRunner runner = new ZuulFilterChainRunner(filters, notifier, registry);
    runner.filter(request);
    verify(inbound1, times(1)).applyAsync(eq(request));
    verify(inbound2, never()).applyAsync(eq(request));
    verify(notifier).notify(eq(inbound1), eq(ExecutionStatus.SUCCESS));
    verify(notifier).notify(eq(inbound2), eq(ExecutionStatus.SKIPPED));
    verifyNoMoreInteractions(notifier);
}
Also used : FilterUsageNotifier(com.netflix.zuul.FilterUsageNotifier) ZuulFilter(com.netflix.zuul.filters.ZuulFilter) Registry(com.netflix.spectator.api.Registry) Test(org.junit.Test)

Example 4 with ZuulFilter

use of com.netflix.zuul.filters.ZuulFilter in project zuul by Netflix.

the class ZuulFilterChainRunnerTest method testOutboundFilterChain.

@Test
public void testOutboundFilterChain() {
    final SimpleOutboundFilter outbound1 = spy(new SimpleOutboundFilter(true));
    final SimpleOutboundFilter outbound2 = spy(new SimpleOutboundFilter(false));
    final ZuulFilter[] filters = new ZuulFilter[] { outbound1, outbound2 };
    final FilterUsageNotifier notifier = mock(FilterUsageNotifier.class);
    final Registry registry = mock(Registry.class);
    final ZuulFilterChainRunner runner = new ZuulFilterChainRunner(filters, notifier, registry);
    runner.filter(response);
    verify(outbound1, times(1)).applyAsync(any());
    verify(outbound2, never()).applyAsync(any());
    verify(notifier).notify(eq(outbound1), eq(ExecutionStatus.SUCCESS));
    verify(notifier).notify(eq(outbound2), eq(ExecutionStatus.SKIPPED));
    verifyNoMoreInteractions(notifier);
}
Also used : FilterUsageNotifier(com.netflix.zuul.FilterUsageNotifier) ZuulFilter(com.netflix.zuul.filters.ZuulFilter) Registry(com.netflix.spectator.api.Registry) Test(org.junit.Test)

Example 5 with ZuulFilter

use of com.netflix.zuul.filters.ZuulFilter in project zuul by Netflix.

the class StaticFilterLoader method loadFilterTypesFromResources.

public static Set<Class<ZuulFilter<?, ?>>> loadFilterTypesFromResources(ClassLoader loader) throws IOException {
    Set<Class<ZuulFilter<?, ?>>> filterTypes = new LinkedHashSet<>();
    for (URL url : Collections.list(loader.getResources(RESOURCE_NAME))) {
        try (InputStream is = url.openStream();
            InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
            BufferedReader br = new BufferedReader(isr)) {
            String line;
            while ((line = br.readLine()) != null) {
                String trimmed = line.trim();
                if (!trimmed.isEmpty()) {
                    Class<?> clz;
                    try {
                        clz = Class.forName(trimmed, false, loader);
                    } catch (ClassNotFoundException e) {
                        // This can happen if a filter is deleted, but the annotation processor doesn't
                        // remove it from the list.   This is mainly a problem with IntelliJ, which
                        // forces append only annotation processors.  Incremental recompilation drops
                        // most of the classpath, making the processor unable to reconstruct the filter
                        // list.  To work around this problem, use the stale, cached filter list from
                        // the initial full compilation and add to it.  This makes incremental
                        // compilation work later, at the cost of polluting the filter list.  It's a
                        // better experience to log a warning (and do a clean build), than to
                        // mysteriously classes.
                        logger.warn("Missing Filter", e);
                        continue;
                    }
                    @SuppressWarnings("unchecked") Class<ZuulFilter<?, ?>> filterClz = (Class<ZuulFilter<?, ?>>) clz.asSubclass(ZuulFilter.class);
                    filterTypes.add(filterClz);
                }
            }
        }
    }
    return Collections.unmodifiableSet(filterTypes);
}
Also used : LinkedHashSet(java.util.LinkedHashSet) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) URL(java.net.URL) BufferedReader(java.io.BufferedReader) ZuulFilter(com.netflix.zuul.filters.ZuulFilter)

Aggregations

ZuulFilter (com.netflix.zuul.filters.ZuulFilter)6 Test (org.junit.Test)3 Registry (com.netflix.spectator.api.Registry)2 FilterUsageNotifier (com.netflix.zuul.FilterUsageNotifier)2 ProxyEndpoint (com.netflix.zuul.filters.endpoint.ProxyEndpoint)1 InboundPassportStampingFilter (com.netflix.zuul.filters.passport.InboundPassportStampingFilter)1 OutboundPassportStampingFilter (com.netflix.zuul.filters.passport.OutboundPassportStampingFilter)1 HttpRequestMessage (com.netflix.zuul.message.http.HttpRequestMessage)1 HttpResponseMessage (com.netflix.zuul.message.http.HttpResponseMessage)1 ZuulFilterChainHandler (com.netflix.zuul.netty.filter.ZuulFilterChainHandler)1 BufferedReader (java.io.BufferedReader)1 InputStream (java.io.InputStream)1 InputStreamReader (java.io.InputStreamReader)1 URL (java.net.URL)1 LinkedHashSet (java.util.LinkedHashSet)1