2011-09-16 41 views
1

我已經將CXF OSGi包部署在一個karaf容器上,每個容器包含多個端點。端點是JAX-RS和JAX-WS風格的混合體。我想通過JOSSO在端點上啓用一些安全性,並且需要註冊一個servlet過濾器才能這樣做。顯然,沒有web.xml來聲明過濾器,我需要在OSGi服務註冊表中註冊它們。CXF OSGi包 - 根據CXFServlet註冊一個過濾器?

我試圖使用pax-web httpboard來註冊一個過濾器,但doFilter方法從未被調用過。我注意到分佈式OSGI cxf實現有一個規定,在過濾器上將org.apache.cxf.httpservice.filter屬性設置爲true,併爲servletNames指定一個虛擬字符串,以免混淆pax-web白板。對於標準的CXF(非分佈式)OSGi包,我可以做些什麼來註冊一個servlet過濾器嗎?

回答

0

經過大量的挖掘,我可以使用Felix + PAX Web爲CXF Servlet設置過濾器。訣竅是從CXF bundle中註冊過濾器(每個bundle有不同的http上下文)。

在我的代碼中,我獲取了名爲getBundles()的包上下文,它位於cxf包中,並獲得了CXF包的包上下文。然後我在CXF bundle的上下文中註冊過濾器。我現在覺得很骯髒,但它工作。

我記得曾經看過一個建議,爲配置PAX的Jetty服務器創建一個fragement bundle,這可能也適用於註冊一個過濾器 - 但是我不想在當前時間在我們的項目中創建另一個工件。