mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
4.2.0
This commit is contained in:
@@ -1,103 +1,39 @@
|
|||||||
# 自定义过滤器
|
# 自定义过滤器
|
||||||
|
|
||||||
## zuul过滤器
|
演示在网关追加一个header
|
||||||
|
|
||||||
zuul过滤器列表如下:
|
|
||||||
|
|
||||||
| 类型 | 顺序 | 过滤器 | 功能 |
|
|
||||||
| ----- | ---- | ----------------------- | ---------------------------- |
|
|
||||||
| pre | -1000 | PreValidateFilter (SOP自带) | 校验签名 |
|
|
||||||
| pre | -998 | PreLimitFilter (SOP自带) | 限流拦截器 |
|
|
||||||
| pre | -3 | ServletDetectionFilter | 标记处理 Servlet 的类型 |
|
|
||||||
| pre | -2 | Servlet30WrapperFilter | 包装 HttpServletRequest 请求 |
|
|
||||||
| pre | -1 | FormBodyWrapperFilter | 包装请求体 Servlet30WrapperFilter |
|
|
||||||
| pre | 1 | DebugFilter | 标记调试标志 |
|
|
||||||
| pre | 5 | PreDecorationFilter | 决定路由转发过滤器 |
|
|
||||||
| route | 10 | RibbonRoutingFilter | serviceId 请求转发 |
|
|
||||||
| route | 100 | SimpleHostRoutingFilter | url 请求转发 |
|
|
||||||
| route | 500 | SendForwardFilter | forward 请求转发 |
|
|
||||||
| post | 0 | SendErrorFilter | 处理有错误的请求响应 |
|
|
||||||
| post | 1000 | SendResponseFilter | 处理正常的请求响应 |
|
|
||||||
|
|
||||||
顺序值小的优先执行,`-3`之前是sop自带的过滤器,`-3`开始是zuul自带的过滤器。
|
|
||||||
|
|
||||||
创建自定义过滤器可以从`-500`开始(-1000 ~ -501留给SOP)。下面是一个自定义过虑器的例子:
|
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class PreXXXFilter extends BaseZuulFilter {
|
public class CustomFilter implements GlobalFilter, Ordered {
|
||||||
@Override
|
|
||||||
protected FilterType getFilterType() {
|
|
||||||
return FilterType.PRE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getFilterOrder() {
|
|
||||||
return -500;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Object doRun(RequestContext requestContext) throws ZuulException {
|
|
||||||
HttpServletRequest request = requestContext.getRequest();
|
|
||||||
ApiParam apiParam = ZuulContext.getApiParam();
|
|
||||||
String appKey = apiParam.fetchAppKey();
|
|
||||||
// ...业务处理
|
|
||||||
|
|
||||||
// 固定返回null
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
过滤器编写完毕后,在Config中使用:
|
|
||||||
|
|
||||||
```java
|
|
||||||
@Configuration
|
|
||||||
public class ZuulConfig extends AlipayZuulConfiguration {
|
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
PreXXXFilter preXXXFilter() {
|
|
||||||
return new PreXXXFilter();
|
|
||||||
}
|
|
||||||
...
|
|
||||||
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## spring cloud gateway
|
|
||||||
|
|
||||||
跟zuul同理
|
|
||||||
|
|
||||||
```java
|
|
||||||
public class XXXFilter implements GlobalFilter, Ordered {
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
ApiParam apiParam = (ApiParam)exchange.getAttribute(SopConstants.CACHE_API_PARAM);
|
// 演示在网关追加header
|
||||||
String appKey = apiParam.fetchAppKey();
|
ApiParam apiParam = ServerWebExchangeUtil.getApiParam(exchange);
|
||||||
// ...业务处理
|
String token = apiParam.fetchAccessToken();
|
||||||
...
|
ServerWebExchange serverWebExchange = ServerWebExchangeUtil.addHeaders(exchange, httpHeaders -> {
|
||||||
return chain.filter(exchange);
|
httpHeaders.add("token", token);
|
||||||
|
});
|
||||||
|
return chain.filter(serverWebExchange);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getOrder() {
|
public int getOrder() {
|
||||||
return -500;
|
// 自定义过滤器可以从0开始
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
使用过滤器:
|
使用过滤器,在sop-gateway中找到MyConfig,添加:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
@Configuration
|
@Configuration
|
||||||
public class GatewayConfig extends AlipayGatewayConfiguration {
|
public class MyConfig {
|
||||||
|
|
||||||
...
|
...
|
||||||
@Bean
|
@Bean
|
||||||
XXXFilter xxxFilter() {
|
CustomFilter customFilter() {
|
||||||
return new XXXFilter();
|
return new CustomFilter();
|
||||||
}
|
}
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user