# 概念

fizz 插件可理解为响应式的 http servlet filter,即能拦截请求作处理,也能对响应作调整。

插件可作用于路由,即匹配路由的所有请求;或网关分组,即一组路由。

插件开发分网关和管理后台两部分,网关部分定义插件及执行逻辑,管理后台定义插件的配置。

下面以简单的登录校验为例,即客户端通过请求头 token 传递登录态,插件校验登录态,介绍插件的开发。

# 网关开发

实现 FizzPluginFilter.java 即定义了一个插件,本例插件实现:

@Component(LoginValidationPlugin.ID) // 必配,用于与管理后台的配置关联等
public class LoginValidationPlugin implements FizzPluginFilter {

    public static final String ID = "LoginValidationPlugin";

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, Map<String, Object> config) {
        String token = exchange.getRequest().getHeaders().getFirst("token");
        if (token.equals("合法")) {
            Mono<Void> next = FizzPluginFilterChain.next(exchange); // 执行后续插件或业务逻辑
            return next.thenReturn(ReactorUtils.Void).flatMap(
                                                                v -> {
                                                                    // here, do something after next
                                                                    return Mono.empty();
                                                                }
                                                     );
        } else {
            return WebUtils.response(exchange, HttpStatus.FORBIDDEN, null, "非法 token");
        }
    }
}

# 管理后台配置

# 插件配置

保存后:

# 路由配置

编辑要应用插件的路由:

添加后:

保存后,凡是匹配路由的请求,均会被插件拦截。