天天看點

springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器

1.建立項目

還是沿用以前項目,保持service-forgn和service-ribbon的controller接口一緻

springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器
springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器

2.修改service-zuul

(1)引入pom

springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器

(2)配置好網關

springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器

主函數中開啟網關

springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器

3.測試

啟動所有程式

springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器

通路

springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器
springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器

4. zuul過濾器

zuul除了路由,還有過濾功能。

@Component
public class MyFilter extends ZuulFilter {

    private static Logger log = LoggerFactory.getLogger(MyFilter.class);

    /**
     * filterType:傳回一個字元串代表過濾器的類型,在zuul中定義了四種不同生命周期的過濾器類型,具體如下:
     * 1 pre:路由之前
     * 2 routing:路由之時
     * 3 post: 路由之後
     * 4 error:發送錯誤調用
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 過濾的順序設定,0表達第一個過濾
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 這裡可以寫邏輯判斷,是否要過濾,true表示永遠過濾。
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 過濾器的具體邏輯。可以進行權限通路的判斷
     * @return
     */
    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));
        Object accessToken = request.getParameter("token");
        if(accessToken == null) {
            log.warn("token is empty");
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            try {
                ctx.getResponse().getWriter().write("token is empty");
            }catch (Exception e){}

            return null;
        }
        log.info("ok");
        return null;
    }
}
           

通路 http://localhost:8769/api-a/hi?name=aa 過濾器生效

springcloud(五):zuul網關和過濾器1.建立項目2.修改service-zuul3.測試4. zuul過濾器

源碼: https://github.com/LUK-qianliu/springcloud

繼續閱讀