一 代码位置
https://github.com/cakin24/spring-cloud-code/tree/master/ch8-1
二 测试
1 启动eureka-server
2 启动client-a
3 启动zuul-server
4 访问http://localhost:5555/client/mul?a=100&b=200
从结果可知:FirstPreFilter、SecondPreFilter、ThirdPreFilter、GroovyFilter、PostFilter过滤器依次生效。
5 访问http://localhost:5555/client/mul?b=200
从结果可知:FirstPreFilter、SecondPreFilter、GroovyFilter、PostFilter过滤器依次生效。
6 访问http://localhost:5555/client/mul?a=200
从结果可知:FirstPreFilter、SecondPreFilter、ThirdPreFilter、GroovyFilter、PostFilter过滤器依次生效。
7 修改GroovyFilter.groovy代码如下
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.*;
import javax.servlet.http.HttpServletRequest
import com.netflix.zuul.ZuulFilter
import com.netflix.zuul.context.RequestContext
import com.netflix.zuul.exception.ZuulException
class GroovyFilter extends ZuulFilter {
@Override
public String filterType() {
return PRE_TYPE
}
@Override
public int filterOrder() {
return 10
}
@Override
public boolean shouldFilter() {
return true
}
@Override
public Object run() throws ZuulException {
HttpServletRequest request = RequestContext.currentContext.request as HttpServletRequest
Iterator headerIt = request.getHeaderNames().iterator()
while (headerIt.hasNext()) {
String name = (String) headerIt.next()
String value = request.getHeader(name)
println("header: " + name + ":" + value)
}
println("This is Groovy Filter!good Groovy Filter")
return null
}
}
再次访问http://localhost:5555/client/mul?a=100&b=200
从结果可知,修改GroovyFilter后,无须重写编译,过滤器也能生效。