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]
问题:那么,这样可以吗?
我尝试了什么:
我尝试分配我的过滤器 @Priority(1)
。然后我的过滤器飞到了responseFilters
数组的末尾,最后执行了
我试图在实现 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 {
是否有可能以任何方式将执行优先级设置为来自实现 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]
问题:那么,这样可以吗?
我尝试了什么:
我尝试分配我的过滤器
@Priority(1)
。然后我的过滤器飞到了responseFilters
数组的末尾,最后执行了我试图在实现
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 {