You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle APEX中如何动态设置LOGOUT_URL,实现不同用户登出跳转不同页面

Oracle APEX 动态设置不同用户类型的登出跳转URL

方法1:自定义登出按钮(推荐)

替代APEX默认登出组件,通过PL/SQL动态生成跳转地址:

  • 第一步:创建应用项P_USER_AUTH_TYPE,标记用户认证类型(如LOCAL=本地自定义认证,REMOTE=跨应用会话共享认证)
    • 本地认证:在自定义认证方案的Post-Authentication Procedure中添加代码:
      APEX_UTIL.SET_SESSION_STATE('P_USER_AUTH_TYPE', 'LOCAL');
      
    • 跨应用会话共享:在主应用的Session Initialization过程中判断会话来源并设置:
      IF APEX_UTIL.GET_SESSION_ATTRIBUTE('APEX_SOURCE_APP_ID') IS NOT NULL THEN
          APEX_UTIL.SET_SESSION_STATE('P_USER_AUTH_TYPE', 'REMOTE');
      END IF;
      
  • 第二步:在全局页(Page 0)添加自定义登出按钮
    • 按钮类型选PL/SQL Code
    • 填写PL/SQL代码:
      DECLARE
          l_next_url VARCHAR2(2000);
      BEGIN
          CASE :P_USER_AUTH_TYPE
              WHEN 'LOCAL' THEN
                  l_next_url := 'f?p=' || :APP_ID || ':LOGIN:' || :SESSION || '::NO:::';
              WHEN 'REMOTE' THEN
                  l_next_url := 'f?p=123:LOGIN:' || :SESSION || '::NO:::'; -- 替换123为源应用ID
          END CASE;
          APEX_AUTH.LOGOUT(
              p_app_id => :APP_ID,
              p_session_id => :SESSION,
              p_next_url => l_next_url
          );
      END;
      
    • 隐藏默认登出按钮:在应用导航栏设置中取消默认登出按钮的显示

方法2:修改认证方案的登出过程

针对不同认证方案配置专属登出逻辑:

  • 本地自定义认证方案:
    1. 创建自定义登出存储过程:
      CREATE OR REPLACE PROCEDURE LOCAL_USER_LOGOUT
      IS
          l_next_url VARCHAR2(2000);
      BEGIN
          l_next_url := 'f?p=' || v('APP_ID') || ':LOGIN:' || v('SESSION') || '::NO:::';
          APEX_AUTH.LOGOUT(
              p_app_id => v('APP_ID'),
              p_session_id => v('SESSION'),
              p_next_url => l_next_url
          );
      END;
      
    2. 在认证方案的Logout Procedure字段中填写LOCAL_USER_LOGOUT
  • 跨应用会话共享认证方案:
    1. 创建对应登出过程:
      CREATE OR REPLACE PROCEDURE REMOTE_USER_LOGOUT
      IS
          l_next_url VARCHAR2(2000);
      BEGIN
          l_next_url := 'f?p=123:LOGIN:' || v('SESSION') || '::NO:::'; -- 替换为源应用ID
          APEX_AUTH.LOGOUT(
              p_app_id => v('APP_ID'),
              p_session_id => v('SESSION'),
              p_next_url => l_next_url
          );
      END;
      
    2. 在该认证方案的Logout Procedure字段中填写REMOTE_USER_LOGOUT

方法3:前端动态修改默认登出链接(快速临时方案)

通过jQuery修改默认登出按钮的跳转地址,适合轻量场景:

  • 在全局页(Page 0)创建Dynamic Action:
    • 触发条件:Page Load
    • 动作选Execute JavaScript Code
    • 代码内容:
      var authType = apex.item('P_USER_AUTH_TYPE').getValue();
      var logoutUrl;
      if (authType === 'LOCAL') {
          logoutUrl = 'f?p=' + apex.app.getAppId() + ':LOGIN:' + apex.app.getSessionId() + '::NO:::';
      } else if (authType === 'REMOTE') {
          logoutUrl = 'f?p=123:LOGIN:' + apex.app.getSessionId() + '::NO:::'; // 替换为源应用ID
      }
      $('a.t-Button--logout').attr('href', apex.server.url(logoutUrl, {}, {x01: 'LOGOUT'}));
      
  • 注意:此方法依赖APEX前端组件类名,不同版本可能需要调整选择器

内容的提问来源于stack exchange,提问作者RussB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:25:12