
网关过滤器(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)”来收尾。
但愿这些信息对你有所匡助九游体育娱乐网。
