脚本宝典收集整理的这篇文章主要介绍了SpringCloud Gateway,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
网关是一个服务,是访问内部系统的唯一入口,提供内部服务的路由中转,额外还可以在此基础上提供
身份认证
、监控
、负载均衡
,限流
、降级
与应用检测
等功能
SPRing Cloud Gateway 底层使用了高性能的通信框架Netty
nginx+lua 高性能反向代理服务器,通常做为负载均衡入口后端
Zuul是第一代网关,spring浏览器
cloud是第二代网关,基于NettyReactorWebFLux构建缓存
缺点
参考的是java8的java.util.function.predicate 开发人员可以匹配http请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
predicates:
- path=/mg/**
参数值可以写正则,也可以只写参数名
predicates:
- query=foo,ba.
predicates:
- Method=get
predicates:
- Host=wzx.cool
predicates:
- cookie=name.wuzhixuan
构建网关的基本模块,它由id,目标uri,一系列的断言和过滤器组成,如果断言为true则匹配该路由
指的是spring框架中gatewayfilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
默认情况下gateway会根据注册中心注册的服务列表以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能
server:
port: 80
spring:
application:
name: wuzx-gateway
profiles:
active: sIT
cloud:
nacos:
discovery:
server-addr: wuzx.cool:30000
config:
server-addr: wuzx.cool:30000
file-extension: yaML
gateway:
discovery:
locator:
enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名进行路由
loadbalancer:
retry:
enabled: true
routes:
- id: payment_routh #路由的id,没有固定规则但要求唯一,建议配合服务名
# uri: http://localhost:8001 #匹配后提供服务的路由地址
uri: lb://cloud-payment-service
predicates:
- path=/payment/get/** #断言,路径相匹配的进行路由
- id: payment_routh2
#uri: http://localhost:8001
uri: lb://cloud-payment-service
predicates:
- path=/payment/lb/** #断言,路径相匹配的进行路由
两个接口介绍:globalfilter,ordered
功能:
/**
* 鉴权认证
*
* @author 吴志旋
* 自定义filter 需要实现Ordered 和GlobalFilter
* Ordered 优先级 越小优先级越大
*/
@Slf4j
@component
@AllargsConstructor
public class AuthFilter implements GlobalFilter, Ordered {
private final AuthProPErties authProperties;
private final ObjectMapper objectMapper;
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
@override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String path = exchange.getRequest().getURI().getPath();
if (isSkip(path)) {
return chain.filter(exchange);
}
ServerHttpResponse resp = exchange.getResponse();
String headerToken = "";
String paramToken ="";
if (StringUtils.isAllBlank(headerToken, paramToken)) {
return unAuth(resp, "缺失令牌,鉴权失败");
}
String auth = StringUtils.isBlank(headerToken) ? paramToken : headerToken;
String token = JwtUtil.getToken(auth);
Claims claims = JwtUtil.parseJWT(token);
if (claims == null) {
return unAuth(resp, "请求未授权");
}
return chain.filter(exchange);
}
private boolean isSkip(String path) {
}
@Override
public int getOrder() {
return -100;
}
}
以上是脚本宝典为你收集整理的SpringCloud Gateway全部内容,希望文章能够帮你解决SpringCloud Gateway所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。