# 概念
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");
}
}
}
# 管理后台配置
# 插件配置
保存后:
# 路由配置
编辑要应用插件的路由:
添加后:
保存后,凡是匹配路由的请求,均会被插件拦截。