一、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;
}
});