quarkus 扩展中的过滤器是否可以设置优先级?

Is it possible for the filter from the quarkus extension to set priority?

是否有可能以任何方式将执行优先级设置为来自实现 ContainerResponseFilter 的扩展的过滤器?

详情:

正如我所看到的,按照通常的行为,首先执行主应用程序的过滤器,然后执行扩展程序的过滤器。 但是,在我的例子中,扩展中的过滤器必须在主应用程序的过滤器之前执行。或者至少是来自主应用程序其他扩展的过滤器。

示例:

ContainerResponseFilter[] responseFilters 来自 ContainerResponseContextImpl.

我有:

responseFilters = [app filter][app filter][extension filter][extension filter][MY EXTENSION FILTER][extension filter]

我想要:

responseFilters = [MY EXTENSION FILTER][app filter][app filter][extension filter][extension filter][extension filter]

responseFilters = [app filter][app filter][MY EXTENSION FILTER][extension filter][extension filter][extension filter]

问题:那么,这样可以吗?

我尝试了什么:

  1. 我尝试分配我的过滤器 @Priority(1)。然后我的过滤器飞到了responseFilters数组的末尾,最后执行了

  2. 我试图在实现 ContainerResponseFilter 并具有 @Priority(2) 的主应用程序中创建一个虚拟过滤器。我从扩展程序中将 @Priority(1) 分配给了我的过滤器。然后过滤器飞到 responseFilters 数组的末尾,优先级为 2 的虚拟过滤器比优先级为 1 的扩展中的过滤器执行得更早。

我发现了一个非常 non-obvious 的细节:

我试图分配我的过滤器 @Priority(1) 但实际上我需要设置一个很大的值,因为响应中过滤器的优先级是按相反顺序计算的。

由于来自主应用程序的所有响应过滤器都具有默认优先级 @Priority(Priorities.USER),我不得不设置一个更高的值。

我的最终代码如下所示:

@Priority(Priorities.USER + 1)
@Provider
public class MyExtensionResponseFilter implements ContainerResponseFilter {