過濾器放到網關:java
package com.toov5.filter; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; @Component public class TokenFilter extends ZuulFilter { public boolean shouldFilter() { //判斷過濾器是否生效 // TODO Auto-generated method stub return true; } public Object run() throws ZuulException { //編寫顧慮器攔截業務邏輯代碼 // 案例:攔截全部都服務接口,判斷服務接口上是否有傳遞userToekn參數 //獲取上下文 RequestContext currentContext = RequestContext.getCurrentContext(); //獲取request對象 HttpServletRequest request = currentContext.getRequest(); //驗證token時候 token的參數 從請求頭獲取 String userToken = request.getParameter("userToken"); if (StringUtils.isEmpty(userToken)) { //返回錯誤提示 currentContext.setSendZuulResponse(false); //false 不會繼續往下執行 不會調用服務接口了 網關直接響應給客戶了 currentContext.setResponseBody("no no no you have not userToken"); currentContext.setResponseStatusCode(401); return null; } //不然正常執行 調用服務接口... return null; } @Override public String filterType() { //過濾器的類型 // TODO Auto-generated method stub return "pre"; //表示在請求以前執行 } @Override public int filterOrder() { //過濾器執行的順序 一個請求在同一個階段存在多個過濾器時候,多個過濾器執行順序問題 // TODO Auto-generated method stub return 0; } //網關的filter過濾器 }
重寫的全部方法根據本身實際狀況使用。spring
模擬有token的時候apache