局部过滤器
内置局部过滤器
- 在SpringCloud Gateway中内置了很多不同类型的网关路由过滤器。具体如下:
过滤器工厂 |
作用 |
参数 |
AddRequestHeader |
为原始请求添加Header |
Header的名称及值 |
AddRequestParameter |
为原始请求添加请求参数 |
参数名称及值 |
AddResponseHeader |
为原始响应添加Header |
Header的名称及值 |
DedupeResponseHeader |
剔除响应头中重复的值 |
需要去重的Header名称及去重策略 |
Hystrix |
为路由引入Hystrix的断路器保护 |
HystrixCommand的名称 |
FallbackHeaders |
为fallbackUri的请求头中添加具体的异常信息 |
Header的名称 |
PrefixPath |
为原始请求路径添加前缀 |
前缀路径 |
PreserveHostHeader |
为请求添加一个preserveHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host |
无 |
RequestRateLimiter |
用于对请求限流,限流算法为令牌桶 |
keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus |
RedirectTo |
将原始请求重定向到指定的URL |
http状态码及重定向的url |
RemoveHopByHopHeadersFilter |
为原始请求删除IETF组织规定的一系列Header |
默认就会启用,可以通过配置指定仅删除哪些Header |
RemoveRequestHeader |
为原始请求删除某个Header |
Header名称 |
RemoveResponseHeader |
为原始响应删除某个Header |
Header名称 |
RewritePath |
重写原始的请求路径 |
原始路径正则表达式以及重写后路径的正则表达式 |
RewriteResponseHeader |
重写原始响应中的某个Header |
Header名称,值的正则表达式,重写后的值 |
SaveSession |
在转发请求之前,强制执行WebSession::save操作 |
无 |
secureHeaders |
为原始响应添加一系列起安全作用的响应头 |
无,支持修改这些安全响应头的值 |
SetPath |
修改原始的请求路径 |
修改后的路径 |
SetResponseHeader |
修改原始响应中某个Header的值 |
Header名称,修改后的值 |
SetStatus |
修改原始响应的状态码 |
HTTP 状态码,可以是数字,也可以是字符串 |
StripPrefix |
用于截断原始请求的路径 |
使用数字表示要截断的路径的数量 |
Retry |
针对不同的响应进行重试 |
retries、statuses、methods、series |
RequestSize |
设置允许接收最大请求包的大小。如果请求包大小超过设置的值,则返回 413 Payload Too Large |
请求包大小,单位为字节,默认值为5M |
ModifyRequestBody |
在转发请求之前修改原始请求体内容 |
修改后的请求体内容 |
ModifyResponseBody |
修改原始响应体的内容 |
修改后的响应体内容 |
Default |
为所有路由添加过滤器 |
过滤器工厂名称及值 |
内置过滤器的使用
server:
port: 7000
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 192.168.110.130:8848
gateway:
discovery:
locator:
enabled: true # 让gateway从nacos中获取服务信息
routes: # 路由数组[]
- id: product_route # 当前路由的标识,要求唯一,默认是UUID
uri: http://localhost:8081 # 请求最终要转发的地址
order: 1 # 路由的优先级,数字越小代表路由的优先级越高
predicates: #断言(条件判断,返回值是Boolean,转发请求要求满足的条件)
- Path=/product-serv/** # 当请求路径满足path指定的规则时,此路由信息才会正常转发
filters: # 过滤器(在请求传递过程中 对请求做一些手脚)
- StripPrefix=1 # 在请求转发之前去掉一层路径
- SetStatus=250
自定义局部过滤器
server:
port: 7000
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 192.168.110.130:8848
gateway:
discovery:
locator:
enabled: true # 让gateway从nacos中获取服务信息
routes: # 路由数组[]
- id: product_route # 当前路由的标识,要求唯一,默认是UUID
uri: http://localhost:8081 # 请求最终要转发的地址
order: 1 # 路由的优先级,数字越小代表路由的优先级越高
predicates: #断言(条件判断,返回值是Boolean,转发请求要求满足的条件)
- Path=/product-serv/** # 当请求路径满足path指定的规则时,此路由信息才会正常转发
filters: # 过滤器(在请求传递过程中 对请求做一些手脚)
- StripPrefix=1 # 在请求转发之前去掉一层路径
- Log=true,false # 控制日志是否开启
/**
* 自定义局部过滤器工厂类
*/
@Component
public class LogGatewayFilterFactory extends AbstractGatewayFilterFactory<LogGatewayFilterFactory.Config> {
/**
* 构造器
*/
public LogGatewayFilterFactory(){
super(LogGatewayFilterFactory.Config.class);
}
/**
* 读取配置文件中的参数 赋值到 配置类中
* @return
*/
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList("consoleLog","cacheLog");
}
/**
* 过滤器逻辑
* @param config
* @return
*/
@Override
public GatewayFilter apply(LogGatewayFilterFactory.Config config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
if(config.isCacheLog()){
System.out.println("cacheLog已经开启...");
}
if(config.isConsoleLog()){
System.out.println("consoleLog已经开启...");
}
return chain.filter(exchange);
}
};
}
/**
* 配置类 接收配置参数
*/
@Data
@NoArgsConstructor
public static class Config {
private boolean consoleLog;
private boolean cacheLog;
}
}
网友评论