public String intercept(ActionInvocation actionInvocation) throws Exception {
    ServletContext context = ServletActionContext.getServletContext();
    ActionContext act = actionInvocation.getInvocationContext();

    Map<String, Object> application = act.getApplication();

    String gingkgoHome = System.getProperty("gingkgo.home");
    if (null == gingkgoHome) System.setProperty("gingkgo.home", context.getRealPath(""));

    // 设置系统模块
    if (null == application.get(EbizCommon.EBIZ_APP_MODULES)) {
      List<Module> modules = moduleService.roGetModuleList(true);
      Set<String> ms = new HashSet<String>(0);
      for (Module module : modules) {
        ms.add(module.getModuleName());
      }
      application.put(EbizCommon.EBIZ_APP_MODULES, ms);
    }

    // 设置产品组成
    if (null == application.get(EbizCommon.EBIZ_APP_PACKAGE_ITEM)) {
      List<ProductItem> items = productService.getProductItems(ProductType.Package);
      application.put(EbizCommon.EBIZ_APP_PACKAGE_ITEM, items);
    }

    // 主菜单
    if (null == application.get(EbizCommon.EBIZ_APP_MAIN_MENU)) {
      List<MenuItem> items = new ArrayList<MenuItem>();
      items.add(new MenuItem("Desktop", "桌面", "", "ROLE_USER"));
      items.add(new MenuItem("Products", "产品资源", "", "ROLE_PRODUCT"));
      items.add(new MenuItem("Order", "订单管理", "", "ROLE_SALES"));
      items.add(new MenuItem("Operate", "计调操作", "", "ROLE_OPERATOR"));
      items.add(new MenuItem("Express", "配送管理", "", "ROLE_TRANSPORT"));
      items.add(new MenuItem("CRM", "客户管理", "", "ROLE_AGENT_MANAGER"));
      items.add(new MenuItem("Finance", "财务结算", "", "ROLE_FINANCE"));
      items.add(new MenuItem("Stat", "统计分析", "", "ROLE_SUPERUSER"));
      items.add(new MenuItem("System", "系统设置", "", "ROLE_SUPERUSER"));
      items.add(new MenuItem("Config", "设置", "", "ROLE_SUPERUSER"));
      items.add(new MenuItem("Company", "公司设置", "", "ROLE_SUPERUSER"));
      for (MenuItem menuItem : items) {
        List<Shortcut> cuts = shortcutManager.getShortcutByModule(menuItem.getItemName());
        for (Shortcut shortcut : cuts) {
          menuItem
              .getChild()
              .add(
                  new MenuItem(
                      shortcut.getModuleName(),
                      shortcut.getDisplayName(),
                      shortcut.getRelativePath(),
                      shortcut.getRoles()));
        }
      }
      application.put(EbizCommon.EBIZ_APP_MAIN_MENU, items);
    }

    // 设置产品组成
    if (null == application.get(EbizCommon.EBIZ_SYS_CONFIG)) {
      List<SysConfig> items = configService.getAllConfig();
      for (SysConfig config : items) {
        application.put(config.getName(), config.getValue());
      }
      application.put(EbizCommon.EBIZ_SYS_CONFIG, "OK");
    }

    // XML设置参数
    if (null == application.get(EbizCommon.EBIZ_RES_CONFIG)) {
      try {
        application.put(
            EbizCommon.EBIZ_RES_CONFIG, XMLUtility.getInstance(context.getRealPath(XML_PATH)));
      } catch (ParserConfigurationException pce) {
        logger.error("", pce);
      } catch (IOException ioe) {
        logger.error("", ioe);
      } catch (SAXException saxe) {
        logger.error("", saxe);
      } catch (Exception e) {
        logger.error("", e);
      }
    }

    ActionContext.getContext().getValueStack().push(this);

    return actionInvocation.invoke();
  }