2013-04-02 48 views
0

在CQ5.5中如何訂購2個標準HTTP過濾器作爲OSGI組件部署?CQ5.5訂購標準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被調用。

謝謝。

+0

我已經想通了,我可以使用service.ranking命令篩選器作爲OSGI組件。 [吊帶service.ranking] [1] [1]:http://sling.apache.org/site/filters.html – Navi

+0

你應該張貼此作爲回答,然後接受它。 –

回答

2

檢查http://sling.apache.org/site/filters.html 服務排行是你在找什麼。另請注意,在sling/cq5上,您可以通過查看/ system/console/config和Sling Servlet Filters來查看哪些過濾器處於活動狀態以及它們的排名。

另見過濾範圍和所做的更改,介紹基於模式的作用域(SLING-1213SLING-1734

1

你需要一個filter.order屬性添加到您的服務:

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

越低,價值,過濾器將被放置在鏈條的更前面。

+1

從吊襪帶過濾器docs它_seems_好像這已被service.ranking取代。 [filter.order屬性支持2.1.0以下版本(http://sling.apache.org/documentation/the-sling-engine/filters.html#support-in-sling-engine-210)。然而,一些吊索過濾器仍然使用這個屬性,而不是service.ranking。 filter.order屬性僅在service.ranking不存在時使用。見[SLING-1735](https://issues.apache.org/jira/browse/SLING-1735) – diffa

+0

我不知道。感謝指針。 – ilikeorangutans

+0

感謝diffa您是正確的service.ranking是爲Apache Felix Http Service Whiteboard實施訂購標準過濾器的正確方法 – Navi