一、全局過濾器
全局過濾器GlobalFilter
全局過濾器的作用也是處理一切進入網(wǎng)關(guān)的請求和微服務(wù)響應(yīng),與GatewayFilter的作用一樣。
區(qū)別在于GatewayFilter通過配置定義,處理邏輯是固定的。
需求:定義全局過濾器,攔截請求,判斷請求的參數(shù)是否滿足下面條件: 參數(shù)中是否有authorization, authorization參數(shù)值是否為admin 如果同時滿足則放行,否則攔截而GlobalFilter的邏輯需要自己寫代碼實現(xiàn),定義方式是實現(xiàn)GlobalFilter接口
public interface GlobalFilter {
/**
* 處理當(dāng)前請求,有必要的話通過{@link GatewayFilterChain}將請求交給下一個過濾器處理
* @param exchange 請求上下文,里面可以獲取Request、Response等信息
* @param chain 用來把請求委托給下一個過濾器
* @return {@code Mono<Void>}
* 返回標(biāo)示當(dāng)前過濾器業(yè)務(wù)結(jié)束
*/
Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}
需求:定義全局過濾器,攔截請求,判斷請求的參數(shù)是否滿足下面條件:
- 參數(shù)中是否有authorization
- authorization參數(shù)值是否為admin
如果同時滿足則放行,否則攔截
@Order(-1) //順序注解:指定過濾器的順序。(也可以通過Ordered接口實現(xiàn))
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//1.獲取請求參數(shù)
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> params = request.getQueryParams();
//2.獲取參數(shù)中的 authorization參數(shù)
String auth = params.getFirst("authorization");
//3.判斷參數(shù)是否等于admin
if(auth.equals("admin")){
//4.相同就放行
return chain.filter(exchange);
}
//5.不同
//5.1 設(shè)置狀態(tài)碼
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
@Override
public int getOrder() {
return -1;
}
}
全局過濾器的作用是什么?
對所有路由都生效的過濾器,并且可以自定義處理邏輯
實現(xiàn)全局過濾器的步驟?
- 實現(xiàn)GlobalFilter接口
- 添加@Order注解或?qū)崿F(xiàn)Ordered接口
- 編寫處理邏輯
過濾器執(zhí)行順序
- 每一個過濾器都必須指定一個int類型的order值,order值越小,優(yōu)先級越高,執(zhí)行順序越靠前。
- GlobalFilter通過實現(xiàn)Ordered接口,或者添加@Order注解來指定order值,由我們自己指定
- 路由過濾器和defaultFilter的order由Spring指定,默認是按照聲明順序從1遞增。
- 當(dāng)過濾器的order值一樣時,會按照 defaultFilter > 路由過濾器 > GlobalFilter的順序執(zhí)行。?
跨域問題處理
跨域:域名不一致就是跨域,主要包括:
- 域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com
- 域名相同,端口不同:localhost:8080和localhost8081
跨域問題:瀏覽器禁止請求的發(fā)起者與服務(wù)端發(fā)生跨域ajax請求,請求被瀏覽器攔截的問題 解決方案:CORS
網(wǎng)關(guān)處理跨域采用的同樣是CORS方案,并且只需要簡單配置即可實現(xiàn):文章來源:http://www.zghlxwxcb.cn/news/detail-469065.html
CORS跨域要配置的參數(shù)包括哪幾個?文章來源地址http://www.zghlxwxcb.cn/news/detail-469065.html
- 允許哪些域名跨域?
- 允許哪些請求頭?
- 允許哪些請求方式?
- 是否允許使用cookie?
- 有效期是多久?
spring:
cloud:
gateway:
globalcors: # 全局的跨域處理
add-to-simple-url-handler-mapping: true # 解決options請求被攔截問題
corsConfigurations:
'[/**]':
allowedOrigins: # 允許哪些網(wǎng)站的跨域請求
- "http://localhost:8090"
- "http://www.leyou.com"
allowedMethods: # 允許的跨域ajax的請求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允許在請求中攜帶的頭信息
allowCredentials: true # 是否允許攜帶cookie
maxAge: 360000 # 這次跨域檢測的有效期
到了這里,關(guān)于Gateway網(wǎng)關(guān) 全局過濾器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!