2

感谢 HttpService,我正在开发 servlet 并将它们注册到我的 OSGI 容器中。我的目标是保护在我的 OSGI 容器中注册的所有 servlet。我看到我可以使用我自己的 handleSecurity 方法实现向 HttpContext 注册我的 Servlet 来处理我的安全性。

但我正在考虑捆绑使用默认 HttpContext 注册 servlet 的情况(意味着没有安全性)。

所以我的问题是,有没有办法一劳永逸地强制部署在我的 OSGI 容器中的所有 servlet 的安全性?

4

3 回答 3

3

简短的回答是不使用 HttpService。

更长的答案,如果您使用根据 OSGi 规范尚不​​可用的白板扩展器,您可能会实现类似的效果,但 felix 和 pax-web 确实提供了它。使用白板扩展器时,您可以结合对 HttpContext 的引用(作为属性)注册 servlet。当然,这个 HttpContext 也需要是一个“定制的”,但您只需要注册一次并能够从您的 Servlet 中引用它。这可能是您最接近您的问题的地方。

于 2012-09-20T13:10:19.890 回答
3

如果您使用 Apache Felix 白板扩展器,您可以注册一个 Servlet 过滤器,这是处理安全性的更好方法,因为它很容易支持不同的策略。意图是在Http Service的下一次更新中支持Filters和whiteboard:https ://github.com/osgi/design/tree/master/rfcs/rfc0189

您可以按照建议使用钩子,但请不要。钩子是为深层中间件设计的,而不是面向应用程序的方面。它们产生启动/停止排序问题,它们使系统对调试工具更加不透明,简而言之,它们使您的系统更加复杂。如果您出于这些目的开始使用钩子,您会发现更多用例,并且它们将开始交互。远离它们,除了非常核心的系统中间件。

于 2013-09-19T06:41:11.243 回答
3

我将使用服务挂钩功能 (OSGI 4.3) 来覆盖 HttpService.registerServlet 的行为。在我的钩子中,我将强制使用我的 HttContext 实现。

使用此解决方案,任何向 HttpService 注册 servlet 的包都将受到我的 HttpContext 实现的保护。

于 2012-09-21T07:03:48.873 回答