APEX 通過資料庫中使用者資訊驗證登陸
1. Custom Authentication in Oracle APEX
參考:https://o7planning.org/en/10443/custom-authentication-in-oracle-apex
1.1. Introduction
This document is based on:
· Oracle APEX 5.0
· Oracle APEX 5.1.4 測試可用
1.2. Default authentication of APEX
APEX預設登入頁是101,預設驗證方式APEX使用者驗證。本文主要測試通過資料庫中使用者資訊進行驗證登陸。
1.3. SQL Script
1) 建立使用者資訊表USER_ACCOUNT
create table USER_ACCOUNT ( USER_NAME VARCHAR2(30) not null, PASSWORD VARCHAR2(30) not null, USER_TYPE VARCHAR2(10) not null, ACTIVE VARCHAR2(1) not null, EMAIL VARCHAR2(64) not null, FULL_NAME VARCHAR2(64) not null ) ;
alter table USER_ACCOUNT add constraint USER_ACCOUNT_PK primary key (USER_NAME) ; alter table USER_ACCOUNT add constraint USER_ACCOUNT_UK unique (EMAIL) ;
-----------------------------------
insert into user_account (USER_NAME, PASSWORD, USER_TYPE, ACTIVE, EMAIL, FULL_NAME) values ('tom', 'tom123', 'admin', 'Y', 'tom@example.com', 'Tom');
insert into user_account (USER_NAME, PASSWORD, USER_TYPE,ACTIVE, EMAIL, FULL_NAME) values ('jerry', 'jerry123', 'user', 'Y', 'jerry@example.com', 'Jerry');
insert into user_account (USER_NAME, PASSWORD, USER_TYPE,ACTIVE, EMAIL, FULL_NAME) values ('donald', 'donald123', 'guest', 'N', 'donald@example.com', 'Donald');
Commit; |
2) 建立儲存過程PKG_SECURITY
Create Or Replace Package Pkg_Security Is Function Authenticate_User(p_User_Name Varchar2,p_Password Varchar2) Return Boolean; ----- Procedure Process_Login(p_User_Name Varchar2 ,p_Password Varchar2 ,p_App_Id Number);
End Pkg_Security; / Create Or Replace Package Body Pkg_Security Is Function Authenticate_User(p_User_Name Varchar2 ,p_Password Varchar2) Return Boolean As v_Password User_Account.Password%Type; v_Active User_Account.Active%Type; v_Email User_Account.Email%Type; Begin If p_User_Name Is Null Or p_Password Is Null Then -- Write to Session, Notification must enter a username and password Apex_Util.Set_Session_State('LOGIN_MESSAGE','Please enter Username and password.'); Return False; End If; ---- Begin Select u.Active ,u.Password ,u.Email Into v_Active ,v_Password ,v_Email From User_Account u Where u.User_Name = p_User_Name; Exception When No_Data_Found Then -- Write to Session, User not found. Apex_Util.Set_Session_State('LOGIN_MESSAGE','User not found'); Return False; End; If v_Password <> p_Password Then -- Write to Session, Password incorrect. Apex_Util.Set_Session_State('LOGIN_MESSAGE','Password incorrect'); Return False; End If; If v_Active <> 'Y' Then Apex_Util.Set_Session_State('LOGIN_MESSAGE','User locked, please contact admin'); Return False; End If; --- -- Write user information to Session. -- Apex_Util.Set_Session_State('SESSION_USER_NAME',p_User_Name); Apex_Util.Set_Session_State('SESSION_EMAIL',v_Email); --- --- Return True; End;
-------------------------------------- Procedure Process_Login(p_User_Name Varchar2 ,p_Password Varchar2 ,p_App_Id Number) As v_Result Boolean := False; Begin v_Result := Authenticate_User(p_User_Name,p_Password); If v_Result = True Then -- Redirect to Page 1 (Home Page). Wwv_Flow_Custom_Auth_Std.Post_Login(p_User_Name -- p_User_Name ,p_Password -- p_Password ,v('APP_SESSION') -- p_Session_Id ,p_App_Id || ':1' -- p_Flow_page ); Else -- Login Failure, redirect to page 101 (Login Page). Owa_Util.Redirect_Url('f?p=&APP_ID.:101:&SESSION.'); End If; End;
End Pkg_Security; / |
1.4. Declaring Application Items
3) 在應用程式中,點選“共享元件”》“應用程式項”;
應用程式項定義: 使用應用程式項可以維護會話狀態。應用程式項可以通過使用計算, 處理或在 URL 中傳遞值來設定。使用 "新建例項時" 計算可以為會話設定一次項值。使用應用程式項可以維護未顯示並且未指定給任何頁的會話狀態。 |
4) 點選“建立”按鈕:
輸入對應屬性值:
名稱:LOGIN_MESSAGE
範圍:Application
然後點選右上方“建立應用程式項”;
應用程式項可在後期被PL/SQL中呼叫,
如:Apex_Util.Set_Session_State('LOGIN_MESSAGE','User not found');
同樣,再建立兩個應用程式項:
· SESSION_USER_NAME
· SESSION_EMAIL
1.5. Custom Authentication
5) 在應用程式中編輯“登入頁”,登入頁頁碼為101;
6) 右擊“Content Body”建立新區域。
7) 選中新區域,修改屬性值:
標識》標題:LOGIN_MESSAGE
標識》型別:靜態內容
源》文字:&LOGIN_MESSAGE. 注意結尾帶”.”,如沒有將不能返回變數值。
服務端條件》型別:項不為空值
服務端條件》項:選擇應用程式項:LOGIN_MESSAGE
8) 左側導航欄切換到“處理“標籤頁,替換”處理“》”處理“》”Login”,修改其中“源”》“PL/SQL 程式碼”,
預設值:--apex_authentication.login(p_username => :P101_USERNAME,p_password => :P101_PASSWORD );
替換值:Pkg_Security.Process_Login(:P101_USERNAME,:P101_PASSWORD,:APP_ID);
9) 儲存並執行測試;
附測試表中使用者資訊
使用者名稱 使用者密碼 使用者狀態
tom tom123 Y
jerry jerry123 Y
donald donald123 N
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2156515/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 登陸驗證
- 登入介面:從資料庫中獲取資訊驗證登入(與註冊介面相聯絡)資料庫
- 1.6.5.2. 通過密碼檔案驗證連線資料庫密碼資料庫
- SpringSceurity(5)---簡訊驗證碼登陸功能Spring
- 騰訊資料庫tdsql部署與驗證資料庫SQL
- AJAX+JAVA使用者登陸註冊驗證Java
- 按 F12獲取登陸資料,一鍵登陸巴西衛生部資料庫資料庫
- root 使用者通過 sqlplus 連線資料庫SQL資料庫
- JWT驗證使用者資訊功能JWT
- 資料庫欄位設定非空, phalcon建立資料驗證不透過資料庫
- 通過selenium突破極驗驗證實現登入
- 通過觸發器記錄資料庫連線資訊觸發器資料庫
- 通過session模擬登陸Session
- 阿里雲PolarDB-X資料庫透過分散式資料庫金融標準驗證阿里資料庫分散式
- 如何通過SQL隱碼攻擊盜取資料庫資訊SQL資料庫
- 大陸居民身份證、港澳臺居民居住證 Composer 包:驗證、獲取基本資訊以及生成假資料
- CAS配置資料庫,實現資料庫使用者認證資料庫
- 2.3 通過DBCA建立資料庫資料庫
- 通過duplicat恢復資料庫資料庫
- mssql2008使用者預設資料庫登陸失敗的解決方法SQL資料庫
- asp.net mvc中的使用者登入驗證過濾器ASP.NETMVC過濾器
- Django中的ORM如何通過資料庫中的表格資訊自動化生成Model 模型類?DjangoORM資料庫模型
- kettle通過命令列引數傳遞資料庫連線資訊命令列資料庫
- Mysql資料庫是如何通過索引定位資料MySql資料庫索引
- OpenYurt 與 FabEdge 整合驗證——雲邊資料面通訊初試
- jsonlint:python的json資料驗證庫JSONPython
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊
- AndroidStudio通過一個登入功能介紹SQLite資料庫的使用AndroidSQLite資料庫
- Shiro加鹽驗證/儲存使用者資訊
- 使用 GoFrame 框架 JWT 方式驗證使用者資訊GoFrame框架JWT
- 獲取所有域使用者的登陸歷史資訊指令碼指令碼
- Intellij IDEA 通過資料庫生成 POJOIntelliJIdea資料庫POJO
- 組態王與Access資料庫通訊--④資料庫測試資料庫
- 登入驗證判斷,獲取後臺資料
- 通過SQL Server資料庫映象保護虛擬資料庫ICSQLServer資料庫
- 通過 POI 將資料庫中的資料上傳至 OSS 物件儲存資料庫物件
- Pydantic:強大的Python 資料驗證庫Python
- Oracle資料庫密碼延遲驗證Oracle資料庫密碼