create or replace package bsys.sys_login_api
is
-- 고정변수 정의
c_package_name constant varchar2(0200) default 'sys_login_api';
-- 함수 정의
procedure login_p
(pi_user_cd in varchar2 -- 사용자코드
,pi_user_pwd in varchar2 -- 비밀번호
,pi_lang_cd in varchar2 -- 언어코드
);
end sys_login_api;
create or replace package body bsys.sys_login_api
/* ********************************************************************************************
* 업 무 단 위 : 시스템관리
* 패 키 지 : bsys.sys_login_api
* 사 용 목 적 : 로그인 세션정보 관리 패키지
* 생 성 일 자 : 2024-02-01
* 생 성 자 : Admin
--------------------------------------------------------------------------------------------
* 수정일자 수정자 수정내역
--------------------------------------------------------------------------------------------
* 2024-02-01 Admin 최초 작성
******************************************************************************************** */
is
/* ********************************************************************************************
* 사 용 목 적 : 로그인 세션정보 관리 함수
* 생 성 일 자 : 2024-02-01
* 생 성 자 : Admin
******************************************************************************************** */
procedure login_p
(pi_user_cd in varchar2 -- 사용자코드
,pi_user_pwd in varchar2 -- 비밀번호
,pi_lang_cd in varchar2 -- 언어코드
)
is
l_rec com_user%rowtype default null;
l_decrypto_yn varchar2(1) default 'N';
--
l_result_cd number default null;
l_result_descr varchar2(4000) default null;
l_user_exception exception;
begin
-- 기본값 할당
l_result_cd := 0;
l_result_descr := sys_init_api.c_success_descr;
-- 로그저장
sys_log_api.g_log := null;
sys_log_api.g_log.log_name := '사용자 로그인 체크';
sys_log_api.g_log.param_package := 'bsys.sys_login_api.login_p';
sys_log_api.g_log.param_corp_id := -1;
sys_log_api.g_log.param_lang_cd := upper(nvl(pi_lang_cd, wwv_flow.g_flow_language));
sys_log_api.g_log.param_user_cd := upper(nvl(pi_user_cd, nvl(wwv_flow.g_user, user)));
sys_log_api.g_log.param_transaction_type := 'V';
sys_log_api.g_log.param_file_name := null;
sys_log_api.g_log.param_info := '-- 로그인 변수값 할당 ' || chr(10) ||
'pi_user_pwd → ' || pi_user_pwd;
sys_log_api.g_log.result_status_cd := 'U';
sys_log_api.g_log.result_descr := null;
-- 사용자 비밀번호 확인
begin
select cu.corp_id
,cu.user_cd
,cu.user_name
,nvl((select sp.profile_value
from sys_profile sp
where 1=1
and sp.profile_cd = 'DECRYPTO_YN'
and sp.corp_id = cu.corp_id
), 'N') as decrypto_yn
into l_rec.corp_id
,l_rec.user_cd
,l_rec.user_name
,l_decrypto_yn
from com_user cu
where 1 = 1
and cu.user_cd = upper(pi_user_cd)
and cu.user_pwd = sys_crypto_api.encrypt_f(pi_user_pwd);
exception
when others then
raise l_user_exception;
end;
-- 법인ID 업데이트
sys_log_api.g_log.corp_id := l_rec.corp_id;
sys_log_api.g_log.param_corp_id := l_rec.corp_id;
sys_log_api.log_p(l_result_cd, l_result_descr);
if l_result_cd = -1 then raise l_user_exception; end if;
-- aepx 비밀번호 변경
apex_authentication.login(upper(pi_user_cd), pi_user_pwd);
-- 세션 정보 할당
sys_env_api.set_env_p(l_rec.corp_id, l_rec.user_cd, upper(pi_lang_cd));
-- apex 세션항목 추가 및 정상으로 처리
apex_util.set_session_state('GV_CORP_ID' , l_rec.corp_id);
apex_util.set_session_state('GV_LANG_CD' , sys_log_api.g_log.param_lang_cd);
apex_util.set_session_state('GV_USER_CD' , l_rec.user_cd);
apex_util.set_session_state('GV_USER_NAME' , l_rec.user_name);
apex_util.set_session_state('GV_DECRYPTO_YN' , l_decrypto_yn);
apex_util.set_session_state('GV_TRANSACTION_TYPE', '');
apex_util.set_session_state('GV_RESULT_CD' , 0);
apex_util.set_session_state('GV_RESULT_DESCR' , '정상적으로 로그인 되었습니다.');
apex_util.set_authentication_result(0);
exception
when l_user_exception then
apex_util.set_session_state('GV_RESULT_CD' , -1);
apex_util.set_session_state('GV_RESULT_DESCR', l_result_descr);
apex_util.set_authentication_result(-1);
raise_application_error(-20000, '로그인 사용자가 존재하지 않습니다.');
when others then
apex_util.set_session_state('GV_RESULT_CD' , -1);
apex_util.set_session_state('GV_RESULT_DESCR', '로그인 처리시 오류가 발생하였습니다.');
apex_util.set_authentication_result(-1);
raise_application_error(-20000, '로그인 처리시 오류가 발생하였습니다.');
end login_p;
end sys_login_api;
'오라클 > 패키지(시스템관리)' 카테고리의 다른 글
[ 권한 및 시노님 ] 시스템공통으로 사용할 패키지에 대한 권한 및 시노님을 부여합니다. (0) | 2024.04.12 |
---|---|
[ 프로파일 ] sys_profile_api 패키지를 생성합니다. (0) | 2024.04.12 |
[ 국가 ] sys_country_api 패키지를 생성합니다. (0) | 2024.04.12 |
[ 암복호화 ] sys_crypto_api 패키지를 생성합니다. (0) | 2024.04.12 |