多种认证切换

[[Oracle APEX]] [[Oracle APEX19安装部署]]

场景

OsXM1-2024-08-16-14-37-33

操作

注意 认证还是使用APEX自带的认证

OsXM1-2024-08-16-14-40-47

  1. 将两种认证方式都启用会话共享 见下

    OsXM1-2024-08-16-14-41-45

  2. 在登录页(默认是9999) 设置两个按钮分别切换对应的认证

    如下设置重定向URL

    https://域名.com/ords/f?p=&APP_ID.:1:&APP_SESSION.:APEX_AUTHENTICATION=验证方案中的名字

    OsXM1-2024-08-16-14-46-50

问题

存在一个深联接的问题.可参考下方代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
DECLARE
    t_appid                varchar2(4000) := :APP_ID;
    t_after_login_url      varchar2(4000);
    t_after_login_url_base varchar2(4000);
    t_gotopage_str         varchar2(4000);
    t_gotopage             varchar2(4000);
    t_gotopage_parm_names  varchar2(4000);
    t_gotopage_parm_values varchar2(4000);
BEGIN

    t_after_login_url := APEX_UTIL.GET_SESSION_STATE('FSP_AFTER_LOGIN_URL');
        
    apex_debug.info(t_after_login_url);
    
    IF t_after_login_url IS NOT NULL THEN
        IF INSTR(t_after_login_url, '/f?p=') > 0 THEN
    
            -- 'f?p=4000:4500:9790243847840::::FB_FLOW_ID,FB_FLOW_PAGE_ID,P104_LINK_ID3:119035,9999,27183&cs=1HiH11dzE&p_dialog_cs=OG4ZDc0oRg'
            -- todo 解析登录前的URL和对应的参数
            SELECT COLUMN_VALUE
            INTO t_gotopage --- 4500
            FROM (SELECT COLUMN_VALUE, ROWNUM rn
                  FROM TABLE ( apex_string.split(t_after_login_url, ':') ))
            WHERE rn = 2;
            SELECT COLUMN_VALUE
            INTO t_gotopage_parm_names -- FB_FLOW_ID,FB_FLOW_PAGE_ID,P104_LINK_ID3
            FROM (SELECT COLUMN_VALUE, ROWNUM rn
                  FROM TABLE ( apex_string.split(t_after_login_url, ':') ))
            WHERE rn = 7;
            SELECT COLUMN_VALUE
            INTO t_gotopage_parm_values --- 119035,9999,27183&cs=1HiH11dzE&p_dialog_cs=OG4ZDc0oRg
            FROM (SELECT COLUMN_VALUE, ROWNUM rn
                  FROM TABLE ( apex_string.split(t_after_login_url, ':') ))
            WHERE rn = 8;
            t_gotopage_parm_values := SUBSTR(t_gotopage_parm_values, 1, INSTR(t_gotopage_parm_values, '&') - 1); --- 27181,27182,27183


        ELSE
            -- todo 解析登录前的URL和对应的参数
            -- /pls/apex/r/sssss/ddfdfdffd/qwdqwdq?session=104333301030250

            SELECT COLUMN_VALUE
            INTO t_after_login_url_base -- qwdqwdq?session=104333301030250
            FROM (SELECT COLUMN_VALUE, ROW_NUMBER() OVER (ORDER BY ROWNUM DESC ) rn
                  FROM TABLE ( apex_string.split(t_after_login_url, '/')
                      ))
            WHERE rn = 1;
            t_gotopage_str := SUBSTR(t_after_login_url_base, 1, INSTR(t_after_login_url_base, '?') - 1);
            -- qwdqwdq

            SELECT MAX(DECODE(page_id, '9999', NULL, page_id))
            INTO t_gotopage -- 0,1,2,34,5,6,7
            FROM APEX_APPLICATION_PAGES
            WHERE APPLICATION_ID = t_appid
              AND UPPER(PAGE_ALIAS) = UPPER(t_gotopage_str);

        END IF;
    END IF;

     
    IF t_gotopage = '9999' OR t_gotopage IS NULL THEN
        t_gotopage := 1;
    END IF;
    :P9999_GOTOPAGE := t_gotopage;
END;
Licensed under CC BY-NC-SA 4.0
最后更新于 2025-12-03 14:41
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计