由于HttpService,我正在开发servlet并将它们注册到我的OSGI容器中。 我的目标是保护在我的OSGI容器中注册的所有servlet。 我看到我可以使用带有自己的handleSecurity方法实现的HttpContext注册我的Servlet来处理我的安全性。
但我想的是捆绑包使用默认的HttpContext注册一个servlet(暗示没有安全性)。
所以我的问题是,有没有办法强制一次性部署在我的OSGI容器中的所有servlet的安全性?
答案 0 :(得分:3)
使用HttpService的答案是否定的。
答案越长,如果你使用的是whiteboard-extender,你可能会达到类似的效果,但是根据OSGi规范还没有,但是felix和pax-web确实提供了它。 使用whiteboard-extender时,您可以将您的servlet与对HttpContext(作为属性)的引用一起注册。当然,这个HttpContext也需要是一个“自定义”的,但你只需要注册一次,并能够从你的Servlet中引用它。 这可能是您接近问题的最接近的。
答案 1 :(得分:3)
我将使用服务挂钩功能(OSGI 4.3)来覆盖HttpService.registerServlet的行为。在我的钩子中,我将强制使用我的HttContext实现。
使用此解决方案,任何使用HttpService注册servlet的bundle都将受到我的HttpContext实现的保护。
答案 2 :(得分:3)
如果您使用Apache Felix白板扩展器,您可以注册Servlet过滤器,这是一种更好的处理安全性的方法,因为它很容易支持不同的策略。目的是在下次更新Http服务时支持过滤器和白板:https://github.com/osgi/design/tree/master/rfcs/rfc0189
您可以按照建议使用挂钩,但请不要。钩子用于深度中间件,而不是面向应用程序的方面。它们会产生启动/停止排序问题,它们会使系统对调试工具更加不透明,简而言之它们会使系统变得更加复杂。如果你为这些目的开始使用钩子,你会发现更多的用例,他们将开始互动。除了非常核心的系统中间件外,远离它们。