I'm achieve our zuul add a filter set. This additional filter should view headers and redirects the request to determine position I known configuration.
This is the body of the run method of the filter
@Override public Object run() { log.debug("Running the PreRouteTransMarkAndLoggingZuulFilter filter "); // retrieve redirect URL String redirectURL = filterConfigurationBean.getRedirectURL(); if (redirectURL.isEmpty()) { return null; } // get the white list for allowed entries Set<String> whiteList = new HashSet<>(Arrays.asList(filterConfigurationBean.getWhiteList().split(","))); RequestContext ctx = RequestContext.getCurrentContext(); // if request url is part of white list then allow String url = ctx.getRequest().getRequestURL().toString(); if (checkWhiteList(url, whiteList)) { return null; } // get headers // check if an authorization header is present if (validHeader(ctx.getRequest())) { return null; } // if it got to here then if no header then redirect request try { ctx.getResponse().sendRedirect(redirectURL); } catch (IOException e) { log.error("unable to send a redirect to the login page"); } return null; }
Okay, so I implemented and tested it (which is defined as a pre-filter, because I do not want to send a request in the routing phase. Somewhere, further, it throws an exception.
2017-06-26 17:00:36.482 WARN 6267 --- [tp1303192419-23] o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering com.netflix.zuul.exception.ZuulException: Filter threw Exception at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:227) at com.netflix.zuul.FilterProcessor.runFilters (Filter Processor .java : 157 ) to com .netflix .zuul .FilterProcessor . post route (Filter Processor .java : 92 ) to com .netflix .zuul .ZuulRunner . post route (ZuulRunner .java : 87 ) to com .netflix .zuul .http .ZuulServlet . post-route (ZuulServlet .java : 107 ) to com .netflix .zuul .http .ZuulServlet . service(ZuulServlet.java:88) at org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:157) at org.springframework.cloud.netflix.zuul.web.ZuulController.handleRequest(ZuulController.java:44) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650) at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:206) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler