我正在研究涉及访问不属于当前包的其他包的属性的用例。为了实现这一点,我必须修改当前AEM捆绑包(AEM 6.2)的权限。我看到OSGi服务的ConditionalPermissionAdmin是前进的方向。在使用AEM中的getServiceReference进行检索时,OSGI ConfigurationAdmin为空
方法参考:http://moi.vonos.net/java/osgi-security/
我有下面的代码,即打算取回ConditionalPermissionAdmin但 一些未知的原因,这总是空。
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版本是什么?你能详细说明你的用例吗?以及为什么基于用户的权限不起作用? –
@AhmedMusallam - 我在AEM 6.2上。我用这个用例更新了描述。基于用户的权限不起作用,因为这不是与内容相关的内容。 – phemanthkumar28
当你说“访问其他包的属性”是什么意思?你想要访问什么? OSGI配置? –