是否可以根据类型拦截命令?
Can commands be intercepted based on their type?
在Axon, Command Interceptors 似乎拦截了所有命令。对于权限检查,我需要根据命令的类型来决定是否在当前上下文中被允许。
@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(List<? extends CommandMessage<?>> messages) {
return (index, command) -> {
// Check permissions
return command;
};
}
通常我更愿意为每个命令类型注册一个拦截器并处理专用对象中的权限检查。我将如何与 Axon 一起做?我是否需要在单个拦截器中加载 instanceof
if 语句?有没有人有使用 Axon 检查权限的好例子?
此时 (Axon 4.0) 框架不允许您选择直接为每个命令有效负载类型注册 DispatchInterceptors
。所以你建议做的事情,if-blocks/switch-statements,是你此时能做的最好的事情。
虽然我不确定您的权限检查有多精细,但您可以对命令进行某种形式的权限注释,您需要在其上设置特定的 value/enum。这样你就不必直接将你的有效负载类型绑定到调度程序中,而可以只检查注释是否存在,如果存在,检查它的值是否应该对其执行那种权限检查。
这很可能导致 if-block/switch-statement 比检查每个负载类型小得多。
在Axon, Command Interceptors 似乎拦截了所有命令。对于权限检查,我需要根据命令的类型来决定是否在当前上下文中被允许。
@Override
public BiFunction<Integer, CommandMessage<?>, CommandMessage<?>> handle(List<? extends CommandMessage<?>> messages) {
return (index, command) -> {
// Check permissions
return command;
};
}
通常我更愿意为每个命令类型注册一个拦截器并处理专用对象中的权限检查。我将如何与 Axon 一起做?我是否需要在单个拦截器中加载 instanceof
if 语句?有没有人有使用 Axon 检查权限的好例子?
此时 (Axon 4.0) 框架不允许您选择直接为每个命令有效负载类型注册 DispatchInterceptors
。所以你建议做的事情,if-blocks/switch-statements,是你此时能做的最好的事情。
虽然我不确定您的权限检查有多精细,但您可以对命令进行某种形式的权限注释,您需要在其上设置特定的 value/enum。这样你就不必直接将你的有效负载类型绑定到调度程序中,而可以只检查注释是否存在,如果存在,检查它的值是否应该对其执行那种权限检查。
这很可能导致 if-block/switch-statement 比检查每个负载类型小得多。