1 @Component 2 public class MyFilter extends ZuulFilter { 3 4 private static Logger log = LoggerFactory.getLogger(MyFilter.class); 5 @Override 6 public String filterType() { 7 return "pre"; 8 } 9 10 @Override 11 public int filterOrder() { 12 return 0; 13 } 14 15 @Override 16 public boolean shouldFilter() { 17 return true; 18 } 19 20 @Override 21 public Object run() { 22 RequestContext ctx = RequestContext.getCurrentContext(); 23 HttpServletRequest request = ctx.getRequest(); 24 log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString())); 25 Object accessToken = request.getParameter("token"); 26 if(accessToken == null) { 27 log.warn("token is empty"); 28 ctx.setSendZuulResponse(false); 29 ctx.setResponseStatusCode(401); 30 try { 31 ctx.getResponse().getWriter().write("token is empty"); 32 }catch (Exception e){} 33 34 return null; 35 } 36 log.info("ok"); 37 return null; 38 } 39 }
filterType:返回一個字符串表明過濾器的類型,在zuul中定義了四種不一樣生命週期的過濾器類型,具體以下:
pre:路由以前
routing:路由之時
post: 路由以後
error:發送錯誤調用
filterOrder:過濾的順序
shouldFilter:這裏能夠寫邏輯判斷,是否要過濾,本文true,永遠過濾。
run:過濾器的具體邏輯。可用很複雜,包括查sql,nosql去判斷該請求到底有沒有權限訪問。
sql