首页 > 解决方案 > 可以根据类型截取命令吗?

问题描述

Axon中,命令拦截器似乎可以拦截任何命令。对于权限检查,我需要根据命令类型来决定是否在当前上下文中允许。

@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(List<? extends CommandMessage<?>> messages) {
    return (index, command) -> {
        // Check permissions
        return command;
    };
}

通常我更愿意为每个命令类型注册一个拦截器并在专用对象中处理权限检查。我将如何使用 Axon?我需要instanceof在单个拦截器中加载大量 if 语句吗?有没有人有一个很好的使用 Axon 检查权限的例子?

标签: permissionsauthorizationinterceptoraxon

解决方案


此时(Axon 4.0)框架不允许您选择直接注册DispatchInterceptors每个命令有效负载类型。所以你建议做的事情,if-blocks/switch-statements,是你目前能做的最好的事情。

虽然我不确定您的权限检查有多精细,但您可以做的是在命令上添加某种形式的权限注释,并在其上设置特定的值/枚举。这样,您不必将有效负载类型直接绑定到调度程序中,而只需检查注释是否存在,如果存在,请检查它的值,以了解应该对其执行的权限检查类型。

这很可能会导致比检查每个有效负载类型更小的 if-block/switch 语句。


推荐阅读