网站seo优化关键词,电子商务网站设计的认识,无锡网站建设运营,做棋牌推广网站违法不过滤器工厂
过滤器种类
GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务响应的结果做加工处理 Spring提供了31中不同的路由过滤器工厂 AddResponseHeader表示给请求添加响应头
default-filters: # 默认过滤器
- AddResponseHeaderX-Response-Default-R…过滤器工厂
过滤器种类
GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务响应的结果做加工处理 Spring提供了31中不同的路由过滤器工厂 AddResponseHeader表示给请求添加响应头
default-filters: # 默认过滤器
- AddResponseHeaderX-Response-Default-Red, Default-Blue # 添加响应头X-Response-Default-Red: Default-BluePrefixPath表示给请求添加路径前缀
default-filters: # 默认过滤器
- PrefixPath/httpbinAddRequestHeader表示给请求添加key为X-Request-red,value为blue的请求头,可以应用于流量染色
filters: # 服务过滤器
- AddRequestHeaderX-Request-red, blue # 添加请求头X-Request-red: blueAddRequestHeadersIfNotPresent表示给请求添加请求头,但只有当请求头里没有对应的请求头时才会添加,如果有则会传递原始的请求头
filters:# 添加多个请求头X-Request-Color-1:blue,X-Request-Color-2:green
- AddRequestHeadersIfNotPresentX-Request-Color-1:blue,X-Request-Color-2:green AddRequestParameter表示给请求添加请求参数
filters:
- AddRequestParameterred, blue # 添加请求参数redblueAddResponseHeader表示给请求添加响应头
filters:
- AddResponseHeaderX-Response-Red, Blue # 给请求添加响应头X-Response-Red: BlueCircuitBreaker(断路器)用于给接口做降级,当接口报错时降级去请求另一个接口
在使用断路器之前,需要先引入spring-cloud-starter-circuitbreaker-reactor-resilience4j依赖
spring:cloud:gateway:routes:- id: circuitbreaker_routeuri: lb://backing-service:8088predicates:- Path/consumingServiceEndpointfilters:- name: CircuitBreakerargs:name: myCircuitBreakerfallbackUri: forward:/inCaseOfFailureUseThis- RewritePath/consumingServiceEndpoint, /backingServiceEndpointRequestRateLimiter表示使用Redis做限流,使用的令牌桶算法如漏桶算法RedisLimitHandler
filters:
- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 10redis-rate-limiter.burstCapacity: 20redis-rate-limiter.requestedTokens: 1RedirectTo根据请求头里包含的状态码重定向到某个地址
spring:cloud:gateway:routes:- id: prefixpath_routeuri: https://example.orgfilters:- RedirectTo302, https://acme.org # 当请求头里包含302的状态码时重定向到该地址RemoveRequestHeader表示删除请求中对应的请求头
filters:
- RemoveRequestHeaderX-Request-FooRemoveRequestParameter表示删除请求中对应的请求参数
filters:
- RemoveRequestParameterredRemoveResponseHeader表示删除响应中对应的响应头
filters:
- RemoveResponseHeaderX-Response-FooRequestHeaderSize表示限制请求的请求头大小
filters:
- RequestHeaderSize1000B # 如果请求头超过1000B,则会发送431状态码网关三大过滤器
路由过滤器
需求: 给所有进入userservice服务的请求都添加一个请求头如TruthHello World!,当前过滤器写在userservice服务下因此仅对当前路由的请求生效
server:port: 10010 # 网关端口
spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:80 # nacos地址gateway:routes: # 网关路由配置- id: user-serviceuri: lb://userservice # 配置userservice服务的路由规则predicates:- Path/user/**filters:- AddRequestHeaderTruth,Hello World! # 添加请求头Truth,值是Hello World!在UserController中编写对应的控制器方法获取请求头信息,重启网关服务和userservice服务并访问http://localhost:10010/user/test
GetMapping(/test)
public void test(RequestHeader(Truth) String tmp) {System.out.println(tmp);
}默认过滤器
默认过滤器: 如果希望过滤器的操作对所有的路由都生效,则可以将过滤器工厂写到spring.cloud.gateway.default-filters属性下
server:port: 10010 # 网关端口
spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:80 # nacos地址gateway:routes:- id: user-serviceuri: lb://userservicepredicates:- Path/user/**default-filters: # 默认过滤器,对所有的路由请求都生效- AddRequestHeaderTruth,Hello World!全局过滤器
全局过滤器和GatewayFilter一样都可以对进入网关的请求和微服务的响应做加工处理
GatewayFilter网关过滤器: 通过配置文件定义所以处理的逻辑是固定的且只有默认过滤器对所有路由请求生效GlobalFilter全局过滤器: 可以编写代码做自己的业务逻辑,如登录状态判断,权限校验,请求限流等,对所有的路由请求都生效
public interface GlobalFilter {/*** 处理当前请求有必要的话通过{link GatewayFilterChain}将请求交给下一个过滤器处理** param exchange 请求上下文里面可以获取Request、Response等信息* param chain 用来把请求委托给下一个过滤器 * return {code MonoVoid} 返回标示当前过滤器业务结束*/MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain);
}需求: 定义全局过滤器拦截请求,判断请求参数中是否有authorization且参数值是否为admin, 如果同时满足则放行请求否则拦截
第一步: 在gateway模块下新建cn.itcast.gateway.filter包,然后编写AuthorizationFilter类实现GlobalFilter接口并重写其中的filter方法
Order(-1)
Component
public class AuthorizationFilter implements GlobalFilter {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1. 获取请求参数ServerHttpRequest request exchange.getRequest();MultiValueMapString, String params request.getQueryParams();// 2. 获取authorization参数的值String authorization params.getFirst(authorization);// 3. 校验if (admin.equals(authorization)) {// 4. 满足需求则放行return chain.filter(exchange);}// 拦截请求// 5.1 先设置状态码,这里的常量底层就是401(在restFul中401表示未登录)exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);// 5.2 拦截请求return exchange.getResponse().setComplete();}
}第二步: 重启网关测试我们的全局过滤器是否生效,只有访问http://localhost:10010/user/1?authorizationadmin时可以看到正常数据
{id: 1,username: 柳岩,address: 湖南省衡阳市
}过滤器执行顺序
请求进入网关后会经过路由过滤器,DefaultFilter,GlobalFilter三类过滤器,它们本质都是GatewayFilter(GlobalFilter被封装在GatewayFilterAdapter中)
请求路由后会将当前路由过滤器,DefaultFilter,GlobalFilter合并到一个过滤器链集合中,在集合中根据order值对每个过滤器排序后依次按顺序执行 过滤器必须指定一个int类型的order值,order值越小优先级越高即执行顺序越靠前(默认值为int最大值2147483647)
路由过滤器和de默认过滤器的order值: 由Spring指定默认是按照声明顺序从1递增全局过滤器的order值: 通过实现Ordered接口实现getOrder()方法或者添加Order注解来指定order值
//Order(-1)
Component
public class AuthorizationFilter implements GlobalFilter, Ordered {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1. 获取请求参数MultiValueMapString, String params exchange.getRequest().getQueryParams();// 2. 获取authorization参数String authorization params.getFirst(authorization);// 3. 校验if (admin.equals(authorization)) {// 4. 满足需求则放行return chain.filter(exchange);}// 5. 不满足需求设置状态码这里的常量底层就是401在restFul中401表示未登录exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);// 6. 结束处理return exchange.getResponse().setComplete();}Overridepublic int getOrder() {return -1;}
}过滤器的order值相同: 按照defaultFilter routeFilter GlobalFilter的顺序执行
org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters()方法: 负责加载defaultFilters然后再加载某个路由过滤器最后合并org.springframework.cloud.gateway.handler.FilteringWebHandler#handle()方法: 负责加载全局过滤器最后与路由过滤器和默认过滤器合并
# 配置路由过滤器和默认过滤器
server:port: 10010 # 网关端口
spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:80 # nacos地址gateway:routes:- id: user-serviceuri: lb://userservicepredicates:- Path/user/**filters: # 路由过滤器默认是按照声明顺序从1递增- AddRequestHeaderTruth,Hello World! # order值为1- RemoveRequestHeaderX-Request-Foo # order值为2default-filters: # 默认过滤器- AddRequestHeaderTruth,Hello World! # order值为1- RemoveRequestHeaderX-Request-Foo # order值为2# 将自定义的全局过滤器的order也设定为1
文章转载自: http://www.morning.wlfxn.cn.gov.cn.wlfxn.cn http://www.morning.nmkbl.cn.gov.cn.nmkbl.cn http://www.morning.pxwzk.cn.gov.cn.pxwzk.cn http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn http://www.morning.bpmdz.cn.gov.cn.bpmdz.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.kfldw.cn.gov.cn.kfldw.cn http://www.morning.hchrb.cn.gov.cn.hchrb.cn http://www.morning.tnhmp.cn.gov.cn.tnhmp.cn http://www.morning.qpljg.cn.gov.cn.qpljg.cn http://www.morning.daidudu.com.gov.cn.daidudu.com http://www.morning.lgnbr.cn.gov.cn.lgnbr.cn http://www.morning.yxshp.cn.gov.cn.yxshp.cn http://www.morning.kyctc.cn.gov.cn.kyctc.cn http://www.morning.hbxnb.cn.gov.cn.hbxnb.cn http://www.morning.dktyc.cn.gov.cn.dktyc.cn http://www.morning.fkrzx.cn.gov.cn.fkrzx.cn http://www.morning.rqqmd.cn.gov.cn.rqqmd.cn http://www.morning.fthcq.cn.gov.cn.fthcq.cn http://www.morning.pyxwn.cn.gov.cn.pyxwn.cn http://www.morning.swbhq.cn.gov.cn.swbhq.cn http://www.morning.slzkq.cn.gov.cn.slzkq.cn http://www.morning.mgmqf.cn.gov.cn.mgmqf.cn http://www.morning.ntffl.cn.gov.cn.ntffl.cn http://www.morning.tdldh.cn.gov.cn.tdldh.cn http://www.morning.rfyk.cn.gov.cn.rfyk.cn http://www.morning.tsnq.cn.gov.cn.tsnq.cn http://www.morning.tsdqr.cn.gov.cn.tsdqr.cn http://www.morning.csznh.cn.gov.cn.csznh.cn http://www.morning.rbrhj.cn.gov.cn.rbrhj.cn http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn http://www.morning.cjrmf.cn.gov.cn.cjrmf.cn http://www.morning.qgmbx.cn.gov.cn.qgmbx.cn http://www.morning.hwcln.cn.gov.cn.hwcln.cn http://www.morning.zcyxq.cn.gov.cn.zcyxq.cn http://www.morning.zsgbt.cn.gov.cn.zsgbt.cn http://www.morning.wfjrl.cn.gov.cn.wfjrl.cn http://www.morning.wnzgm.cn.gov.cn.wnzgm.cn http://www.morning.zzfqn.cn.gov.cn.zzfqn.cn http://www.morning.mdlqf.cn.gov.cn.mdlqf.cn http://www.morning.lwgrf.cn.gov.cn.lwgrf.cn http://www.morning.fbccx.cn.gov.cn.fbccx.cn http://www.morning.knwry.cn.gov.cn.knwry.cn http://www.morning.gryzk.cn.gov.cn.gryzk.cn http://www.morning.txfxy.cn.gov.cn.txfxy.cn http://www.morning.ckfqt.cn.gov.cn.ckfqt.cn http://www.morning.swkpq.cn.gov.cn.swkpq.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.nqbpz.cn.gov.cn.nqbpz.cn http://www.morning.blzrj.cn.gov.cn.blzrj.cn http://www.morning.wrqw.cn.gov.cn.wrqw.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.wnkqt.cn.gov.cn.wnkqt.cn http://www.morning.qbfqb.cn.gov.cn.qbfqb.cn http://www.morning.qgxnw.cn.gov.cn.qgxnw.cn http://www.morning.frllr.cn.gov.cn.frllr.cn http://www.morning.fmkbk.cn.gov.cn.fmkbk.cn http://www.morning.jikuxy.com.gov.cn.jikuxy.com http://www.morning.qyllw.cn.gov.cn.qyllw.cn http://www.morning.wrtw.cn.gov.cn.wrtw.cn http://www.morning.lpnb.cn.gov.cn.lpnb.cn http://www.morning.xmbhc.cn.gov.cn.xmbhc.cn http://www.morning.skrh.cn.gov.cn.skrh.cn http://www.morning.yksf.cn.gov.cn.yksf.cn http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn http://www.morning.lqynj.cn.gov.cn.lqynj.cn http://www.morning.dlwzm.cn.gov.cn.dlwzm.cn http://www.morning.gynls.cn.gov.cn.gynls.cn http://www.morning.dnqlba.cn.gov.cn.dnqlba.cn http://www.morning.bnjnp.cn.gov.cn.bnjnp.cn http://www.morning.lhqw.cn.gov.cn.lhqw.cn http://www.morning.lwdzt.cn.gov.cn.lwdzt.cn http://www.morning.spsqr.cn.gov.cn.spsqr.cn http://www.morning.nzcys.cn.gov.cn.nzcys.cn http://www.morning.qljxm.cn.gov.cn.qljxm.cn http://www.morning.ndrzq.cn.gov.cn.ndrzq.cn http://www.morning.wmnpm.cn.gov.cn.wmnpm.cn http://www.morning.rqxch.cn.gov.cn.rqxch.cn http://www.morning.rcyrm.cn.gov.cn.rcyrm.cn http://www.morning.djxnw.cn.gov.cn.djxnw.cn