CQ5.5订购标准HTTP过滤器部署为OSGI组件

时间:2013-04-02 21:48:24

标签: cq5 sling

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

问题是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被调用。

感谢。

2 个答案:

答案 0 :(得分:2)

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

另请参阅过滤器范围以及为引入基于模式的范围所做的更改(SLING-1213SLING-1734

答案 1 :(得分:1)

您需要向服务添加filter.order属性:

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

值越低,过滤器将放置在链条的前方。