場景
SpringCloud-使用路由網關統一訪問介面(附代碼下載):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102733039
在上面已經實作使用路由網關統一訪問介面后,下面使用路由網關的服務過濾功能,
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程式猿
獲取編程相關電子書、教程推送與免費下載,
實作
前面使用Zuul實作路由統一網管功能,啟示Zuul還有一個功能是服務過濾功能,
只需要繼承ZuulFilter類并在類上添加@Component注解就可以了,
在專案包下新建filter包,包下新建類LoginFilter
package com.badao.hello.spring.cloud.zuul.filter;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;import java.io.IOException;@Componentpublic class LoginFilter extends ZuulFilter { private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class); /** * 配置過濾型別,有四種不同生命周期的過濾器型別 * 1. pre:路由之前 * 2. routing:路由之時 * 3. post:路由之后 * 4. error:發送錯誤呼叫 * @return */ @Override public String filterType() { return "pre"; } /** * 配置過濾的順序 * @return */ @Override public int filterOrder() { return 0; } /** * 配置是否需要過濾:true/需要,false/不需要 * @return */ @Override public boolean shouldFilter() { return true; } /** * 過濾器的具體業務代碼 * @return * @throws ZuulException */ @Override public Object run() throws ZuulException { //獲取HttpServletRequest物件 RequestContext context = RequestContext.getCurrentContext(); HttpServletRequest request = context.getRequest(); logger.info("{} >>> {}", request.getMethod(), request.getRequestURL().toString()); //獲取請求引數token--令牌 String token = request.getParameter("token"); if (token == null) { logger.warn("Token is empty"); //s設定Zuul回應為false context.setSendZuulResponse(false); //設定回應狀態碼為401-沒有權限 context.setResponseStatusCode(401); try { //向頁面顯示內容 context.getResponse().getWriter().write("no authority"); } catch (IOException e) { } } else { logger.info("OK"); } return null; }}
注:
需要重寫4個方法,具體作用如下,
在具體過濾方法中,這里是判斷請求時是否有token引數,沒有則是沒有權限,
filterType
配置過濾型別,有四種不同生命周期的過濾器型別
1. pre:路由之前
2. routing:路由之時
3. post:路由之后
4. error:發送錯誤呼叫
filterOrder
配置過濾的順序,數值越小越靠前,
shouldFilter
配置是否需要過濾:true/需要,false/不需要,
Object run() throws ZuulException
過濾器的具體業務代碼
至此整個服務體系的結構如下

我們依次啟動Eureka服務、服務提供者、兩個服務消費者、zuul的Application啟動類

再打開瀏覽器輸入:
http://localhost:8769/api/a/hi?message=HelloZuul

此時如果帶著token引數去請求,再次打開瀏覽器輸入:
http://localhost:8769/api/a/hi?message=HelloZuul&token=badao

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/42041.html
標籤:架構設計
