ABAP/Web Dynpro ABAP(WDA)
접속한 IP 주소 가져오는 펑션
Derby
2016. 9. 9. 09:06
보통은 lo_application->get_remote_address( ) 로 접속한 아이피를 알 수 있지만
여러 AP가 있는 환경에서는 로드밸런싱 장비가 중간에 있어서 그 장비 아이피가 나오는 경우가 있습니다.
그래서 그런 경우에도 원래 접속자의 IP를 알 수 있도록 펑션을 만들어 보았습니다.
웹딘에서도 되고 SAP GUI에서도 동작하도록 IF-ELSE 로 SAP GUI용 로직도 넣었습니다.
접속 로그 남기는데 활용하세요.
FUNCTION zget_ip_address.
*"---------------------------------------------------------------------- *"
*"Local interface:
*" EXPORTING
*" REFERENCE(EV_IP) TYPE CSEQUENCE
*"----------------------------------------------------------------------
DATA: lo_application TYPE REF TO if_wd_application,
ls_header_fields TYPE wdr_name_value,
lv_ip TYPE string.
IF wdr_task=>application_name IS INITIAL.
" SAP GUI
CALL METHOD cl_gui_frontend_services=>get_ip_address
RECEIVING
ip_address = lv_ip
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
ELSE.
" WD
READ TABLE wdr_task=>client_window->if_wdr_client_info_object~header_fields INTO ls_header_fields
WITH KEY name = 'x-forwarded-for'.
IF sy-subrc = 0.
" load balancer 통해서 접속한 경우.
lv_ip = ls_header_fields-value.
ELSE.
" 직접 AP 로 접속한 경우.
lo_application = wdr_task=>application->get_api( ).
lv_ip = lo_application->get_remote_address( ).
ENDIF.
ENDIF.
ev_ip = lv_ip.
ENDFUNCTION.