2017-10-18 98 views
0

我正在研究涉及访问不属于当前包的其他包的属性的用例。为了实现这一点,我必须修改当前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()); 
    } 
} 

enter image description here

我看不出有任何编译或运行时的问题。即使是捆绑状态良好。

Bundle Status

这种低级别的API是不是最好的方法的建议here。但我不确定声明式服务方法的许可。

单挑 - >我是OSGi的新概念和实现。

参考文献:

+0

1.您的AEM版本是什么?你能详细说明你的用例吗?以及为什么基于用户的权限不起作用? –

+0

@AhmedMusallam - 我在AEM 6.2上。我用这个用例更新了描述。基于用户的权限不起作用,因为这不是与内容相关的内容。 – phemanthkumar28

+0

当你说“访问其他包的属性”是什么意思?你想要访问什么? OSGI配置? –

回答

2

即使我不完全了解使用情况,以及为什么在一般的业务用户或基于用户的访问是行不通的,这里是我发现:

felix framework security documentation建议你需要安装org.apache.felix.framework.security束,这是默认情况下不AEM安装(至少在看我的香草6.3实例)

它在菲利克斯子项目下的“框架安全”上市页安装:http://felix.apache.org/downloads.cgi#subprojects

的问题是,有没有OSGI的实现在您的实例中。这就是为什么你需要felix安全套件。

+0

太棒了。这工作,其原因确实与相关的ConditionalPermissionAdmin相关的丢失实现有关。安装'org.apache.felix.framework.security'包就像魔术一样工作。 AEM 6.2中也缺少这一点。 – phemanthkumar28

3

一般在OSGi的有可能是一个服务引用(还)没有提供。 因此,简单地获取当前服务引用很可能因时间问题而失败。

一个有效的低级别方法是启动ServiceTracker并在服务可用时作出反应。尽管这样做很难做到。

因此,您已经听说使用DS是最好的和推荐的方法。

+0

因为该问题与ConditionalPermissionAdmin的缺失实现有关。由于通过安装缺少的'org.apache.felix.framework.security'包解决了这个问题,我现在可以使用DS来实现相同的工具。 – phemanthkumar28

+0

ConditionalPermissionAdmin的实现当然是重要的第一步!但是基督教徒指出的问题依然存在......即使你安装了一个实现,你也无法预测或执行服务可用的顺序。因此,如果您只是在某个时间点请求服务,则可能会因为该服务不存在而为空。这就是推荐DS的原因。 –

相关问题