我正在创建一个在 Karaf 中作为 OSGi 容器运行的应用程序,并使用 OSGi HTTP 服务和 Jersey 来公开 REST API。我需要添加 SAML2 身份验证和基于权限授权。我想在 Shiro 中使用基于注释的方法,因为 spring 似乎正在远离 OSGi。我的问题:
- 带有 SAML jar 的 Shiro 适合 OSGi 环境吗?
- 我想使用 WSO2 作为身份提供商。 Shiro 和 WSO2 合作有什么注意事项吗?
- 对于使用注释,Shiro 文档表明我需要放置 AspectJ/Spring/Guice jar - 这在 OSGi 环境中仍然有效吗?我更喜欢 Guice 来满足我所有的 DI 需求。
如果能从 Shiro 用户那里获得一些见解,那就太好了。
更新
我正在使用这个项目:osgi-jax-rs-connector 。因此,我使用 Guice-Peaberry 来注册带有 @Path 或 @Provider 注释的接口(interface)的 OSGi 服务,并且该工具负责将它们转换为 REST 资源。 (类似于 pax-whiteboard?)。我计划以类似的方式将我的过滤器公开为 OSGi 服务,然后将它们与资源一起动态添加。
在之前的一个项目中,我对 OSGi 中的 AspectJ 感到头疼,我不得不从 Karaf 切换到普通的 Equinox,因为春分编织钩与 Karaf 不一致(除其他外,还可以看到来自 Aries 的堆栈跟踪)。那么,会做类似 shiro-jersey 的事情吗?会更好吗?
最佳答案
我确信这是可行的,尽管我已经看到一些限制/问题出现。
为了
1)还没有尝试过,尽管您需要确保告诉 pax-web 和 jetty 相关信息,但需要将其添加到 jetty.xml 中,甚至可能需要将片段包添加到 pax- web-jetty 以便可以加载所需的类。这很可能是您的第一个 classnotfound 问题。
2)不知道WSO2所以不知道
3)如果要使用注解,要小心。对于 Guice,您很可能需要使用 Peaberry,因为据我所知 Guice 还不是“OSGi-fied”。由于类加载器的限制,在 OSGi 环境中使用 AspectJ 并不是一个好主意。如果您有编译时编织,那应该没问题,但运行时编织将是一个挑战。
更新: 完全忘记了,但是有一个Pax Shiro项目可用,也许这可以是一个很好的起点,让您的设置处于正确的阵容中。
关于jersey - Shiro 在 Karaf 中使用 SAML2 和 JAX-RS( Jersey ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22411151/