본문 바로가기
  • 노란색 세상은 어디에 있을까?
  • 봄이 오면 여기에 있겠지.
  • 잠시나마 유유자적 하겠네.
오라클/패키지(시스템관리)

[ 로그인 세션정보 관리 ] sys_login_api 패키지를 생성합니다.

by 태백성 2024. 4. 12.
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;