在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被调用。
感谢。
答案 0 :(得分:2)
检查http://sling.apache.org/site/filters.html 服务排名是您正在寻找的。另请注意,在sling / cq5上,您可以通过查看/ system / console / config和Sling Servlet Filters来查看哪些过滤器处于活动状态以及它们的排名。
另请参阅过滤器范围以及为引入基于模式的范围所做的更改(SLING-1213,SLING-1734)
答案 1 :(得分:1)
您需要向服务添加filter.order属性:
@Property(name="filter.order",intValue=-2500)
值越低,过滤器将放置在链条的前方。