拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Spring Cloud Gateway 网关——路由、过滤器、限流

一、为什么需要网关没有网关客户端直接调用各个微服务混乱且不安全 有网关统一入口做路由、鉴权、限流、日志 客户端 → Gateway → 订单服务/库存服务/用户服务二、引入依赖dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependency三、配置路由server:port:8080spring:cloud:gateway:routes:-id:order-serviceuri:lb://order-servicepredicates:-Path/api/order/**filters:-StripPrefix1-id:stock-serviceuri:lb://stock-servicepredicates:-Path/api/stock/**四、全局过滤器鉴权ComponentpublicclassAuthGlobalFilterimplementsGlobalFilter,Ordered{OverridepublicMonoVoidfilter(ServerWebExchangeexchange,GatewayFilterChainchain){ServerHttpRequestrequestexchange.getRequest();// 放行登录接口Stringpathrequest.getURI().getPath();if(path.contains(/auth/login)){returnchain.filter(exchange);}// 校验 TokenStringtokenrequest.getHeaders().getFirst(Authorization);if(tokennull||!jwtUtil.validateToken(token)){returnunauthorized(exchange);}returnchain.filter(exchange);}privateMonoVoidunauthorized(ServerWebExchangeexchange){exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);returnexchange.getResponse().setComplete();}OverridepublicintgetOrder(){return-100;}}五、限流过滤器ComponentpublicclassRateLimitFilterimplementsGlobalFilter{AutowiredprivateStringRedisTemplateredisTemplate;OverridepublicMonoVoidfilter(ServerWebExchangeexchange,GatewayFilterChainchain){Stringipexchange.getRequest().getRemoteAddress().getAddress().getHostAddress();Stringkeyrate:ip;LongcountredisTemplate.opsForValue().increment(key);if(count1){redisTemplate.expire(key,10,TimeUnit.SECONDS);}if(count10){returntooManyRequests(exchange);}returnchain.filter(exchange);}} 觉得有用的话点赞 关注【张老师技术栈】吧
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门