diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/SpringFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/SpringFilter.java deleted file mode 100644 index bb9fd30f..00000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/SpringFilter.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.springframework.cloud.netflix.zuul; - -import com.netflix.zuul.ZuulFilter; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.springframework.web.context.support.WebApplicationContextUtils; - -import javax.servlet.http.HttpServletRequest; - -/** - * User: spencergibb - * Date: 5/1/14 - * Time: 10:59 PM - */ -public abstract class SpringFilter extends ZuulFilter { - - protected T getBean(Class beanClass) { - //FIXME: hack because zuul uses servlet 2.5? - RequestAttributes requestAttr = RequestContextHolder.currentRequestAttributes(); - if (!(requestAttr instanceof ServletRequestAttributes)) { - throw new IllegalStateException("Current request is not a servlet request"); - } - ServletRequestAttributes attributes = (ServletRequestAttributes) requestAttr; - HttpServletRequest request = attributes.getRequest(); - - WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); - return context.getBean(beanClass); - } -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java index 5cc3a23d..a8a2283a 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java @@ -9,6 +9,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.cloud.netflix.ribbon.RibbonClientPreprocessor; +import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter; import org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter; import org.springframework.cloud.netflix.zuul.filters.pre.DebugFilter; @@ -34,6 +36,12 @@ public class ZuulConfiguration { @Autowired(required = false) private TraceRepository traces; + @Autowired + private RibbonClientPreprocessor preprocessor; + + @Autowired + private SpringClientFactory clientFactory; + @Autowired private DiscoveryClient discovery; @@ -93,7 +101,7 @@ public class ZuulConfiguration { // route filters @Bean public RibbonRoutingFilter ribbonRoutingFilter() { - RibbonRoutingFilter filter = new RibbonRoutingFilter(); + RibbonRoutingFilter filter = new RibbonRoutingFilter(preprocessor, clientFactory); if (traces != null) { filter.setTraces(traces); } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java index 385efb2d..23c7c086 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java @@ -17,9 +17,8 @@ import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.actuate.trace.TraceRepository; -import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.ribbon.RibbonClientPreprocessor; -import org.springframework.cloud.netflix.zuul.SpringFilter; +import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.util.StringUtils; import com.netflix.client.ClientException; @@ -27,12 +26,13 @@ import com.netflix.client.http.HttpRequest.Verb; import com.netflix.client.http.HttpResponse; import com.netflix.hystrix.exception.HystrixRuntimeException; import com.netflix.niws.client.http.RestClient; +import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import com.netflix.zuul.util.HTTPRequestUtils; import com.sun.jersey.core.util.MultivaluedMapImpl; -public class RibbonRoutingFilter extends SpringFilter { +public class RibbonRoutingFilter extends ZuulFilter { private static final Logger LOG = LoggerFactory.getLogger(RibbonRoutingFilter.class); @@ -40,6 +40,16 @@ public class RibbonRoutingFilter extends SpringFilter { private TraceRepository traces; + private RibbonClientPreprocessor preprocessor; + + private SpringClientFactory clientFactory; + + public RibbonRoutingFilter(RibbonClientPreprocessor preprocessor, + SpringClientFactory clientFactory) { + this.preprocessor = preprocessor; + this.clientFactory = clientFactory; + } + public void setTraces(TraceRepository traces) { this.traces = traces; } @@ -71,10 +81,9 @@ public class RibbonRoutingFilter extends SpringFilter { String serviceId = (String) context.get("serviceId"); - getBean(RibbonClientPreprocessor.class).preprocess(serviceId); + preprocessor.preprocess(serviceId); - //TODO: update to ribbon-rxnetty when available - RestClient restClient = getBean(SpringClientFactory.class).namedClient(serviceId, RestClient.class); + RestClient restClient = clientFactory.namedClient(serviceId, RestClient.class); String uri = request.getRequestURI(); if (context.get("requestURI") != null) {