日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SpringCloud-使用路由网关的服务过滤功能-拦截登录前是否有token为例

發布時間:2025/3/19 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud-使用路由网关的服务过滤功能-拦截登录前是否有token为例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

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;@Component public class LoginFilter extends ZuulFilter {private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class);/*** 配置過濾類型,有四種不同生命周期的過濾器類型* 1. pre:路由之前* 2. routing:路由之時* 3. post:路由之后* 4. error:發送錯誤調用* @return*/@Overridepublic String filterType() {return "pre";}/*** 配置過濾的順序* @return*/@Overridepublic int filterOrder() {return 0;}/*** 配置是否需要過濾:true/需要,false/不需要* @return*/@Overridepublic boolean shouldFilter() {return true;}/*** 過濾器的具體業務代碼* @return* @throws ZuulException*/@Overridepublic 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響應為falsecontext.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

?

總結

以上是生活随笔為你收集整理的SpringCloud-使用路由网关的服务过滤功能-拦截登录前是否有token为例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。