環(huán)境前置搭建Nacos:點擊跳轉(zhuǎn)
Spring Cloud Gateway Docs
新建gateway網(wǎng)關(guān)模塊
pom.xml導(dǎo)入依賴
<!-- 網(wǎng)關(guān) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos服務(wù)發(fā)現(xiàn)依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
?文章來源地址http://www.zghlxwxcb.cn/news/detail-681406.html
?
編寫啟動類GatewayApplication.java(不是新模塊就不用編寫)
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
?
?
application.yml配置gateway
server:
port: 10010 # 網(wǎng)關(guān)端口
spring:
application:
name: gateway # 服務(wù)名稱
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes: # 網(wǎng)關(guān)路由配置
- id: user-service # 路由id,自定義,只要唯一即可
# uri: http://127.0.0.1:8081 # 路由的目標地址 http就是固定地址
uri: lb://userservice # 路由的目標地址 lb就是負載均衡,后面跟服務(wù)名稱
predicates: # 路由斷言,也就是判斷請求是否符合路由規(guī)則的條件
- Path=/user/** # 這個是按照路徑匹配,只要以/user/開頭就符合要求
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
?
?
完成以上配置,直接啟動即可,訪問 http://localhost:10010
?
?
GatewayFilter Factories 過濾器工廠:GatewayFilter Factories文檔
application.yml
中filters屬性
spring:
cloud:
gateway:
routes: # 網(wǎng)關(guān)路由配置
- id: user-service # 路由id,自定義,只要唯一即可
uri: lb://userservice # 路由的目標地址 lb就是負載均衡,后面跟服務(wù)名稱
predicates: # 路由斷言,也就是判斷請求是否符合路由規(guī)則的條件
- Path=/user/** # 這個是按照路徑匹配,只要以/user/開頭就符合要求
filters: # 過濾器給請求頭添加信息
- AddRequestHeader=info, header add new info # 格式:key, value => ['info']="header add new info"
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
filters:
- AddRequestHeader=info, header add new info # ['info']="header add new info"
default-filters: # 默認過濾項
- AddRequestHeader=DefaultInfo, all service add new info # ['DefaultInfo']="all service add new info."
?
全局過濾器
:由于配置無法處理業(yè)務(wù),可以使用代碼實現(xiàn)過濾器
新建AuthorizeFilter.java
實現(xiàn)GlobalFilter 接口
重寫 filter方法
@Order(-1) // 過濾器執(zhí)行鏈的順序
@Component
public class AuthorizeFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 獲取請求參數(shù)
MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();
// 獲取authorization參數(shù)
String auth = params.getFirst("authorization");
// 校驗
if ("admin".equals(auth)) {
// 放行
return chain.filter(exchange);
}
// 設(shè)置狀態(tài)碼
exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
// 結(jié)束處理, 沒有通過直接返回
return exchange.getResponse().setComplete();
}
}
執(zhí)行順序
大致為:client → 路由 → 默認過濾器 → 局部(路由)過濾器 → 全局過濾器
?
?
解決跨域問題
跨域問題:瀏覽器禁止請求的發(fā)起者與服務(wù)端發(fā)生跨域ajax請求,請求被瀏覽器攔截的問題。跨域問題并不是提供者和消費者的問題,而是瀏覽器禁止跨域?qū)е碌摹?/code>
application.yml
spring:
cloud:
gateway:
# ...
globalcors: # 全局的跨域處理
add-to-simple-url-handler-mapping: true # 解決options請求被攔截問題
corsConfigurations:
'[/**]':
allowedOrigins: # 允許哪些網(wǎng)站的跨域請求
- "http://localhost:5500"
- "http://127.0.0.1:5500"
allowedMethods: # 允許的跨域ajax的請求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允許在請求中攜帶的頭信息
allowCredentials: true # 是否允許攜帶cookie
maxAge: 360000 # 這次跨域檢測的有效期,避免每次檢查損耗效率
?文章來源:http://www.zghlxwxcb.cn/news/detail-681406.html
更多用法可以參考:Spring Cloud Gateway Docs
?
到了這里,關(guān)于Spring Cloud Gateway的快速使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!