0

在 CQ5.5 中,我如何订购 2 个标准 HTTP 过滤器部署为 OSGI 组件?

问题是 2 个过滤器必须按照 FilterA 先运行然后 FilterB 的顺序运行。

如何按顺序订购 2 个过滤器?

您知道是否有任何 OSGI 或 SCR 属性可以让我订购 2 个过滤器以便一个接一个地运行?

例如:

过滤器 A

@Component
@Service
@org.apache.felix.scr.annotations.Properties({
@Property(name = "pattern", value = "/.*"),
@Property(name = Constants.SERVICE_RANKING, intValue = 99999, propertyPrivate = false)
})
public class FilterA implements implements javax.servlet.Filter {
}

FilterB

@Component
@Service
@org.apache.felix.scr.annotations.Properties({
@Property(name = "pattern", value = "/.*"),
@Property(name = Constants.SERVICE_RANKING, intValue = 100000, propertyPrivate = false)
})
public class FilterB implements implements javax.servlet.Filter {
}

我想先运行FilterA,然后再运行FilterB。

如果我在 CQ5.5 上将上述过滤器部署为 OSGI 包,我只会看到在 HTTP 白板控制台上触发了 FilterB。在我的 CQ5.5 登录请求流程中,我什至没有看到 FilterA 被调用。

谢谢。

4

2 回答 2

2

检查http://sling.apache.org/site/filters.html 服务排名是您正在寻找的。另请注意,在 sling/cq5 上,您可以通过查看 /system/console/config 和 Sling Servlet 过滤器来查看哪些过滤器处于活动状态及其排名。

另请参阅 filter-scope 和为引入基于模式的范围所做的更改(SLING-1213SLING-1734

于 2013-04-03T12:32:06.870 回答
1

您需要为您的服务添加一个 filter.order 属性:

@Property(name="filter.order",intValue=-2500)

该值越低,过滤器将放置在链中越靠前。

于 2013-04-03T17:29:28.160 回答