一、Groovy编写的Filter
1、可以放到指定目录加载
创建一个pre
类型的filter,在run
方法中获取HttpServletRequest
然后答应header信息
在代码中加入groovy编译器,间隔10秒扫描一次groovy文件,其代码如下:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.4</version>
</dependency>
FilterLoader.getInstance().setCompiler(new GroovyCompiler());
try
{
FilterFileManager.setFilenameFilter(new GroovyFileFilter());
FilterFileManager.init(10,"/Users/liaokailin/code/ieda/springcloud/myzuul/src/main/java/com/lkl/springcloud/zuul/filters/groovy/pre");
}
catch (Exception e)
{
throw new RuntimeException(e);
}
这里groovy文件通过绝对路径指定,如果是实际开发中,可以通过db去存储groovy文件。
二、Java编写的filter
通过ServletRegistrationBean
构造ZuulServlet
,该Servlet用以进行filter
执行调度以及监控等等操作
1、SpringBoot应用
final FilterRegistry r = FilterRegistry.instance();
r.put("javaPreFilter", new ZuulFilter()
{
@Override public int filterOrder()
{
return 50000;
}
@Override public String filterType()
{
return "pre";
}
@Override public boolean shouldFilter()
{
return true;
}
@Override public Object run()
{
System.out.println("running javaPreFilter");
RequestContext.getCurrentContext().set("name", "liaokailin");
return null;
}
});