首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖ADF应用程序中某个Webcenter库的service-finition.xml

覆盖ADF应用程序中某个Webcenter库的service-finition.xml
EN

Stack Overflow用户
提问于 2013-10-22 16:31:05
回答 1查看 266关注 0票数 0

在webcenter驱动的ADF应用程序中,我们有一个名为generic-site-resources-model.jar的标准库,其中包含文件META-INF/service-definition.xml,我希望在一行中对其进行修改,以添加view资源的安全权限,如下所示:

代码语言:javascript
复制
@@ -1189,7 +1189,7 @@
         <resource-permission>
           <resource-permission-impl>oracle.webcenter.security.auth.WebCenterResourcePermission</resource-permission-impl>
           <resource-permission-target-id>resource_oracle_webcenter_siteresource_@scope@_navigation_@resource@</resource-permission-target-id>
-          <resource-permission-action-list>manage,update</resource-permission-action-list>
+          <resource-permission-action-list>view,manage,update</resource-permission-action-list>
         </resource-permission>
       </permission-metadata>
     </security-definition>

如何在不改变包含该库本身的WebLogic域的情况下,以某种方式配置我们的应用程序?也许有办法用应用程序提供的克隆覆盖整个generic-site-resources-model.jar?或者(理想情况下)以某种方式替换目标资源权限?或者使用某种自定义的方式控制应用程序中的资源加载?

EN

回答 1

Stack Overflow用户

发布于 2013-10-23 18:16:54

可以使用初始化阶段侦听器和一些代码来实现将自定义操作附加到特定资源类型,而根本不需要任何覆盖。

下面是如何实现的:

ViewControllerProject/src/META-INF/adf-settings.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<adf-settings xmlns="http://xmlns.oracle.com/adf/settings">
    <adfc-controller-config xmlns="http://xmlns.oracle.com/adf/controller/config">
        <lifecycle>
            <phase-listener>
                <listener-id>PortalInitializer</listener-id>
                <class>com.otr.portal.initializer.PortalInitializer</class>
            </phase-listener>
        </lifecycle>
    </adfc-controller-config>
</adf-settings>

com.otr.portal.initializer.PortalInitializer

代码语言:javascript
复制
package com.otr.portal.initializer;

import oracle.adf.controller.v2.lifecycle.Lifecycle;
import oracle.adf.controller.v2.lifecycle.PagePhaseEvent;
import oracle.adf.controller.v2.lifecycle.PagePhaseListener;
import oracle.webcenter.security.internal.common.SecurityUtil;
import oracle.webcenter.security.model.exception.SecExtensionNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class PortalInitializer implements PagePhaseListener {
    private static final Log log = LogFactory.getLog(PortalInitializer.class);
    private boolean firstCall = true;

    @Override
    public void afterPhase(PagePhaseEvent pagePhaseEvent) {
        if (pagePhaseEvent.getPhaseId() == Lifecycle.INIT_CONTEXT_ID) {
            if (firstCall) {
                setupViewNavigationResourcePermssion();
                firstCall = false;
            }
        }
    }

    private void setupViewNavigationResourcePermssion() {
        try {
            SecurityUtil.getSecurityExtension("oracle.webcenter.siteresources.navigation").getExtensionPermMetadata().getResourcePermMetadata().getResourcePermActionsList().add("view");
        } catch (SecExtensionNotFoundException e) {
            log.error("Error adding view resource permission to navigation resource type", e);
        }
    }

    @Override
    public void beforePhase(PagePhaseEvent pagePhaseEvent) {

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19512793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档