让不懂建站的用户快速建站,让会建站的提高建站效率!
栏目分类
发布日期:2024-12-13 11:33 点击次数:104
网关过滤器(Gateway Filter)是微职业架构中高出蹙迫的组件之一,主要用于在央求到达后端职业之前对其进行预经管或后经管。网关过滤器频繁部署在网关层,举例使用 Spring Cloud Gateway、Zuul 等技巧已毕的 API 网关中。
在 Spring Cloud Gateway 中,过滤器所有分为以下两大类:
局部过滤器:只作用于某一个路由(route)。全局过滤器:对通盘的路由齐有用。内置全局过滤器:Spring Cloud Gateway 自带的 30+ 过滤器,细目请看望:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories自界说全局过滤器:确立者自行已毕的过滤器。
1.局部过滤器
Spring Cloud Gateway 中的局部过滤器竖立如下:
spring:cloud:gateway:routes:-id:userserviceuri:http://192.168.1.7:56628predicates:-Path=/user/**filters:-AddResponseHeader=gateway-flag,javacn.site
以上过滤器的含义是在输出对象 Response 中添加 Header 信息,key 为“gateway-flag”,value 为“javacn.site”。
PS:AddResponseHeader 亦然 Gateway 内置过滤器之一。
2.全局过滤器
全局过滤器会对现时网关中的通盘路由齐告成。
2.1 内置全局过滤器
Spring Cloud Gateway 中的内置全局过滤器竖立如下:
spring:cloud:gateway:routes:-id:userserviceuri:http://192.168.1.7:51627-Weight=group1,50-id:userservice2uri:-filters:-default-filters:-AddResponseHeader=gateway-default-filters,www.javacn.site
其中的“default-filters”即是全局内置过滤器,它对通盘的路由(route)有用,它的含义是在输出对象 Response 中添加 Header 信息,key 为“gateway-default-filters”,value 为“www.javacn.site”。
2.2 自界说全局过滤器
Spring Cloud Gateway 中自界说全局过滤器的已毕是,界说一个类,使用 @Component 注解将其存入 IoC 容器,然后再已毕 GlobalFilter 接口,重写 filter 递次,在 filter 中写我方的过滤递次即可,具体已毕如下:
import org.springframework.cloud.gateway.filter.GatewayFilterChain;import org.springframework.cloud.gateway.filter.GlobalFilter;import org.springframework.core.Ordered;import org.springframework.http.HttpStatus;import org.springframework.http.server.reactive.ServerHttpRequest;import org.springframework.http.server.reactive.ServerHttpResponse;import org.springframework.stereotype.Component;import org.springframework.web.server.ServerWebExchange;import reactor.core.publisher.Mono;@ComponentpublicclassAuthFilterimplementsGlobalFilter, Ordered{@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){// 获取 request、response 对象 ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse();// 业务逻辑代码if(request.getQueryParams().getFirst("auth")==null){// 权限有问题复返,并戒指现实 response.setStatusCode(HttpStatus.FORBIDDEN);return response.setComplete(); }// 此递次平方,现实下一步return chain.filter(exchange); }@OverridepublicintgetOrder(){// 此值越小越早现实return1; }}
以上代码是考据央求参数中是否有“auth”参数,若是莫得的话就以为未登录,调用“response.setComplete()”圮绝继续现实,反之则以为仍是登录,不错现实后续经过了,使用“chain.filter(exchange)”来已毕。
但愿这些信息对你有所匡助。
上一篇:企业微信获客助手的使用特色