2012-09-19 36 views
2

由於HttpService,我正在開發servlet並將它們註冊到我的OSGI容器中。 我的目標是保護在我的OSGI容器中註冊的所有servlet。 我看到我可以用我自己的handleSecurity方法實現來註冊我的Servlet和HttpContext來處理我的安全性。OSGI HttpService:保護所有servlet

但我想到的情況下,束註冊一個servlet與默認的HttpContext(意味着沒有安全性)。

所以我的問題是,有沒有辦法強制部署在我的OSGI容器中的所有servlet的安全一勞永逸?

回答

3

我打算使用服務掛鉤功能(OSGI 4.3)來覆蓋HttpService.registerServlet的行爲。在我的鉤子中,我將強制使用我的HttContext實現。

有了這個解決方案,任何使用HttpService註冊servlet的bundle都將通過我的HttpContext實現進行保護。

+0

嗯,是的,如果使用OSGi 4.3這是一個有效的解決方案... –

3

使用HttpService的簡短答案爲否。

較長的答案,如果您使用whiteboard-extender,您可能會達到這樣的效果,但這並不符合OSGi規範的要求,但felix和pax-web確實提供。 使用白板擴展器時,您可以將您的servlet與對HttpContext的引用(作爲屬性)組合使用。當然,這個HttpContext也需要是一個「定製」的,但你只需要註冊一次,並且能夠從你的Servlet中引用它。 這可能是最接近你的問題。

3

如果您使用Apache Felix白板擴展器,您可以註冊一個Servlet過濾器,這是處理安全性更好的方法,因爲它很容易支持不同的策略。目的是在下一次更新的Http服務中支持過濾器和白板:https://github.com/osgi/design/tree/master/rfcs/rfc0189

您可以按照建議使用掛鉤,但請不要。掛鉤用於深層中間件,而不是面向應用的方面。他們創建啓動/停止排序問題,使系統對調試工具更加不透明,簡而言之,他們使系統更加複雜。如果你爲這些目的開始使用鉤子,你會發現更多的用例,他們將開始交互。除非是非常核心的系統中間件,否則請遠離它們。

相關問題