【发布时间】:2018-03-30 17:39:42
【问题描述】:
我正在处理一个涉及访问不属于当前捆绑包的其他捆绑包的属性的用例。为了实现这一点,我必须修改当前 AEM 包 (AEM 6.2) 的权限。我看到 OSGi 服务的 ConditionalPermissionAdmin 是前进的方向。
方法参考:http://moi.vonos.net/java/osgi-security/
我有下面的代码,它打算检索 ConditionalPermissionAdmin 但是 一些未知的原因 this 总是为空。
public class Activator implements BundleActivator {
private static final Logger LOG = LoggerFactory.getLogger(Activator.class);
private ConditionalPermissionAdmin conditionalPermissionAdmin;
@Override
public final void start(final BundleContext bundleContext) {
try {
conditionalPermissionAdmin = getConditionalPermissionAdmin(bundleContext);
if (conditionalPermissionAdmin != null) {
LOG.info("{0} conditionalPermissionAdmin ", conditionalPermissionAdmin.getClass());
/* pseudocode */
}
LOG.info("{0} started", bundleContext.getBundle().getSymbolicName());
} catch (Exception ex) {
LOG.error(ex.getMessage());
}
}
private ConditionalPermissionAdmin getConditionalPermissionAdmin(BundleContext context) throws BundleException {
ServiceReference ref = context.getServiceReference(ConditionalPermissionAdmin.class.getName());
ConditionalPermissionAdmin permissionAdmin = null;
if (ref != null) {
permissionAdmin = (ConditionalPermissionAdmin) context.getService(ref);
}
return permissionAdmin;
}
@Override
public final void stop(final BundleContext bundleContext) {
LOG.info("{0} stopped", bundleContext.getBundle().getSymbolicName());
}
}
我没有看到任何构建或运行时问题。连捆绑包都完好无损。
这个低级 API 并不是 here 建议的最佳方法。但我不确定声明式服务方法是否获得许可。
注意 --> 我是 OSGi 概念和实现的新手。
参考文献:
【问题讨论】:
-
1.你用的是什么AEM版本? 2.你能详细说明你的用例吗?为什么基于用户的权限不起作用?
-
@AhmedMusallam - 我在 AEM 6.2 上。我已经用用例更新了描述。基于用户的权限不起作用,因为这与内容无关。
-
当您说“访问其他捆绑包的属性”时,您是什么意思?你想访问什么? OSGI 配置?
标签: osgi aem osgi-bundle