是否可以在运行时在 OSGI 中注册新的过滤器?
用例如下。我们将 Adobe AEM CMS 与多个租户一起使用。现在我们有一个过滤器,可以根据过滤器模式保护对特定资源的访问。这是过滤器类的标头,该过滤器类拦截对包含 tenant1“受保护”片段的路径的请求。
@Component(service = Filter.class,
property = {
EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST,
EngineConstants.SLING_FILTER_PATTERN + "=" + "/content/dam/tenant1/.*/protected/.*"
})
public class ProtectedResourcesFilter implements Filter ....
现在,每当我们获得 tenant2 时,我们都想用另一种模式扩展 ProtectedResourcesFilter。是否可以修改
EngineConstants.SLING_FILTER_PATTERN
并重新加载过滤器?
或者在 OSGI 中运行时创建并注册一个新的过滤器是否更好?
或者在 OSGI 中运行时创建并注册一个新的过滤器是否更好 ?
这有点矫枉过正,但如果你真的想这样做,答案是肯定的。请参阅 https://cwiki.apache.org/confluence/display/FELIX/Apache+Felix+HTTP+Service#ApacheFelixHTTPService-UsingtheExtHttpService