RouteFilterFactory 是专为路由过滤拦截处理设计的接口。对应路由配置 `filters`


### 1、内置的路由过滤器



|      过滤器工厂                 | 配置前缀           | 说明与示例                         |
| ------------------  |  ------------ | ------------------------ | 
| AddRequestHeaderFilterFactory   |  `AddRequestHeader=`     | 添加请求头<br/> (`AddRequestHeader=Demo-Ver,1.0`)     | 
| AddResponseHeaderFilterFactory   |  `AddResponseHeader=`     | 添加响应头<br/> (`AddResponseHeader=Demo-Ver,1.0`)     | 
| PrefixPathFilterFactory   |  `PrefixPath=`     | 附加路径前缀<br/> (`PrefixPath=/app`)     | 
| RedirectToFilterFactory   |  `RedirectTo=`     | 跳转到<br/> (`RedirectTo=302,http://demo.org/a,true`)     | 
| RemoveRequestHeaderFilterFactory   |  `RemoveRequestHeader=`     | 移除请求头<br/> (`RemoveRequestHeader=Demo-Ver,1.0`)     | 
| RemoveResponseHeaderFilterFactory   |  `RemoveResponseHeader=`     | 移除响应头<br/> (`RemoveResponseHeader=Demo-Ver,1.0`)     | 
| StripPrefixFilterFactory   |  `StripPrefix=`     | 移除路径前缀段数<br/> (`StripPrefix=1`)     | 



### 2、配置示例

```yaml
solon.cloud.gateway:
  routes: #!必选
    - id: demo
      target: "http://localhost:8080" # 或 "lb://user-service"
      predicates: #?可选
        - "Path=/demo/**"
      filters: #?可选
        - "StripPrefix=1"
```



### 3、定制示例


* StripPrefix 过滤器定制示例（配置例：`StripPrefix=1`）

```java
@Component
public class StripPrefixFilterFactory implements RouteFilterFactory {

    @Override
    public String prefix() {
        return "StripPrefix";
    }

    @Override
    public ExFilter create(String config) {
        return new StripPrefixFilter(config);
    }

    public static class StripPrefixFilter implements ExFilter {
        private int parts;

        public StripPrefixFilter(String config) {
            if (Utils.isBlank(config)) {
                throw new IllegalArgumentException("StripPrefixFilter config cannot be blank");
            }

            this.parts = Integer.parseInt(config);
        }

        @Override
        public Completable doFilter(ExContext ctx, ExFilterChain chain) {
            //目标路径重组
            List<String> pathFragments = Arrays.asList(ctx.newRequest().getPath().split("/", -1));
            String newPath = "/" + String.join("/", pathFragments.subList(parts + 1, pathFragments.size()));
            ctx.newRequest().path(newPath);

            return chain.doFilter(ctx);
        }
    }
}
```