페이지 트리

버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

Page No. 

Showpageid

작성자 :   / 검수자 :  


 Launch Release No. 7.3.500.20250722 / Latest Release No. 

외부 포탈에서는 인증 토큰 발급하여 쿠키에 적용 한 후 iFrame 주소에 AUD플랫폼에서 연동할 url 호출
단 , 일부 기능이 크로스 도메인 block으로 처리 불가할 수 있음 (top , parent 접근 불가하여 postMessage 형식 등으로 커스텀 개발이 AUD플랫폼 내 적용되어야 함)



목차
maxLevel5
indent목차
stylesquare
separatorpipe



1. 사전 준비

1-1) AUD플랫폼 서버에 CORS Allowed origin url 등록

− 개요 : 인증 할 타 시스템(고객사 포탈) 주소 등록 . 브라우저에서 호출 될 때 Header에 설정된 Origins URL(원격 주소)을 등록


− 파일 경로

> WAS Deploy 시 경로 : [Context Root]/WEB-INF/classes/framework/service/service_api.properties

   (※ 주의 : 'service_api.properties' 파일 내 'matrix.prop.location' 옵션이 'true' 로 설정 되어 있고 'matrix.prop.location.path' 에 경로가 지정되어 있을 경우 해당 경로로 가서 service_api.properties 파일을 수정)

> 자동 설치 본 적용 시 경로 : [자동 설치 본 설치 위치]/conf/matrix/service_api.properties

   

1-2) 제약 사항

> (warning)(warning)(warning) 고객사 포탈 사이트와 AUD플랫폼 서버도메인 명이 일치해야 함(Application Access Token은 쿠키에 공유 되기 때문에 발생하는 브라우저 정책 상의 제약)(warning)(warning)(warning)


기본적으로 AP 토큰이 쿠키에 공유되어 사용되기 때문에 외부 PORTAL (타 사이트 포탈) 과 AUD7 플랫폼 PORTAL의 Domain name이 동일해야 된다.
ex) 외부 포탈 도메인 : a.bimatrix.com ,AUD 플랫폼 도메인 : b.bimatrix.com → 서브도메인이 .bimatrix.com으로 일치하여 쿠키 공유 허용
       외부 포탈 도메인 : a.bimatrix.com/portal1,AUD 플랫폼 도메인 : a.bimatrix.com/portal2→ 메인 도메인이 a.bimatrix.com 으로 일치하여 쿠키 공유 허용

    • 외부 POTAL에서는 발급된 AP 인증 토큰이 정상적으로 브라우저 Cookie에 bimatrix_ap_accessToken으로 설정되어 있는지 확인이 필요하다.


2. sitePortalAUD7EmSample.jsp 설정 - 고객사 Portal에 적용해야할 샘플 jsp파일

2-1) SSH KEY 설정

2-1-1) audSecretKey, audApId 설정

Admin 시스템 운영관리 > 인증 키 관리 > SSH Key 생성

 (※ 주의 : '인증 키 관리' 페이지가 보이지 않을 경우 '관리자메뉴 설정' 페이지에서 인증 키 관리 페이지를 사용 체크하여 저장한 후 새로고침 하여 접근 할 수 있음)

> Application 아이디 값을 설정하고  Secret Key와 private_key.pem을 다운로드

> SSH Key정보를 sitePortalAUD7EmSample.jsp에 설정


2-1-2) privateKey 설정 - 고객사 포탈 서버에 private_key.pem을 저장하고 경로를 지정

> loadPrivateKey 메서드 매개변수에 '인증 키 관리' 페이지에서 등록이 완료되면 발급되는 private_key.pem 파일의 위치를 설정


2-2) 인증 대상 유저 코드 설정

2-2-1) userCode 설정

> 실제 사이트에서 인증 시켜야 할 계정 값을 설정

   (※ 주의 : 아래 샘플 코드엔 matrix로 고정된 값으로 구현했지만, 실제 구현 시 userCode는 유동적으로 변경하여 인증 과정을 실행해야 함)


2-3) 토큰 요청 URL 및 도메인 설정

2-3-1) AUD_AP_TOKEN_URL 설정

> AUD플랫폼 경로 설정 (Ex. "http(s)://[IP:PORT+Context Root]/api/auth/sign/ap/token")

   (※ 주의 : 서버 통신 방식이기 때문에 IP:PORT를 통해 AUD플랫폼 Portal접속이 가능하면 설정하고, 도메인 URL통신만 가능하다면 해당 서버에서 도메인 통신 확인 후 진행)

정보
titleAP 인증 토큰 발급 API

- AUD 플랫폼에 등록한 Application용 클라이언트 아이디와 클라이언트 시크릿를 인증 정보로 설정하여 Application 인증 JWT 토큰 발급

  • 클라이언트에서 해당 인증 토큰 발급은 제한됩니다. 보안상 클라이언트 인증 정보가 확인될 소지 방지.
  • 타 시스템 포탈에서 최초 1회 인증 토큰 발급 후 만료되었거나 유효하지 않은 토큰일 경우 클라이언트 아이디와 클라이언트 시크릿 정보를 이용하여 인증 토큰을 재발급 합니다.
  • 발급한 토큰은 타 시스템 쿠키에 등록하여 사용합니다 . (쿠키 key = bimatrix_ap_accessToken)
요청 URL메서드Header 설정응답 형식설명

{AUD서버 주소}/api/auth/sign/ap/token

POST

서버 영역에서 API 호출 시에 Request Header로 설정하여 전달

Key설명
X-AUD-AP-Id애플리케이션 클라이언트 아이디값
X-AUD-AP-Secret-SSH

애플리케이션 클라이언트 시크릿값

  • AUD7 플랫폼 발급한 ssh private pem 파일을 이용하여 전달받은 시크릿 Key에 서명을 한 후에 전달하여 토큰 발급 요청
X-AUD-USER
  • Application용 아이디가 아닌 타 시스템에서 로그인 한 사용자로 인증 토큰 발급받아 사용 시에 세션 사용자 아이디 설정
  • 해당 사용자도 AUD 플랫폼 사용자에 등록된 id만 가능
X-AP-UPDATE-ADDR
  • 설정 도메인 (쿠키에 토큰 공유를 위한 도메인 정보)
  • 서브 도메인 , 포트는 달라도 무방함


String

AUD 플랫폼에서 발급된 SSH Private.pem 인증서를 이용하여 Secret Key를 서명한 후에 Header에 Secret Key를 설정하여 전달하여 인증 후 전달된 사용자 또는 클라이언트 아이디로 AUD 플랫폼에서 사용 가능한 인증 토큰 발급.

해당 JWT 인증 토큰을 통해 AUD 플랫폼의 기능 연동을 지원



2-3-2) AUD_AP_TOKEN_UPDATE_URL 설정

> 쿠키에 발급한 aud 인증 jwt 토큰을 공유하기 위한 도메인 설정.

(※ 참고 : 서브 도메인 허용)

3. aud.embedded.setting.jsp 설정 - sitePortalAUD7EmSample.jsp에서 참조하는 샘플 Config파일

3-1) AUD_CONFIG_DATA 설정

- bimatrix_server_url 설정 : AUD플랫폼의 IP:PORT + Context Root로 설정

- webRoot 설정 : 고객사 포탈 인베디드 소스가 위치한 경로를 설정

- cookie_domain 설정 : 토큰을 공유하기 위한 도메인 설정


4. AUD보고서 iFrame 임베디드 방법

> openReport 함수를 사용하여 'REPORT_AUD'라는 iFrame에 i-AUD 보고서를 임베디드


코드 블럭
themeMidnight
titlesitePortalAUD7EmSample.jsp 샘플 소스
linenumberstrue
collapsetrue
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.IOException"%>
<%@ page import="java.net.HttpURLConnection"%>
<%@ page import="java.net.MalformedURLException"%>
<%@ page import="java.net.URL"%>
<%@ page import="java.nio.file.Files"%>
<%@ page import="java.nio.file.Paths"%>
<%@ page import="java.security.KeyFactory"%>
<%@ page import="java.security.PrivateKey"%>
<%@ page import="java.security.Signature" %>
<%@ page import="java.security.spec.PKCS8EncodedKeySpec" %>
<%@ page import="java.util.Base64" %>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<!DOCTYPE html>
<html>
<head>
	<meta name="viewport" content="width=device-width, user-scalable=no">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
	<meta http-equiv="Pragma" content="no-cache">
	<meta http-equiv="Expires" content="0">

	<style>
		* {
			margin: 0;
		}

		.top_panel {
			position: absolute;
			width: 100%;
			height: 50px;
			background-color: black;
		}

		.left_panel {
			position: absolute;
			width: 250px;
			background-color: darkgrey;
		}

		.foot_panel {
			position: absolute;
			bottom: 0; /* 화면의 맨 아래에 위치 */
			left: 0; /* 왼쪽 끝에서 시작 */
			width: 100%;
			height: 10px;
			background-color: pink;
		}

		.HideFrame {
			left: -50000px;
			top: -50000px;
			position: absolute;
		}

		.VisibleFrame {
			float: left;
			position: relative;
			overflow: hidden;
			left: 0px;
			top: 0px;
			width: 100%;
			height: 100%;
		}
	</style>
	<%!
		// 개인 키 로딩
		private static PrivateKey loadPrivateKey(String path) throws Exception {
			// 개인 키 로딩 로직을 구현 (파일 파싱 또는 다른 방법으로)
			System.out.println("Private Key path: " + path);
			String keyPEM = new String(Files.readAllBytes(Paths.get(path)))
                .replaceAll("-----BEGIN PRIVATE KEY-----", "")
                .replaceAll("-----END PRIVATE KEY-----", "")
                .replaceAll("\\s", "");  // 모든 공백 제거

			byte[] keyBytes = Base64.getDecoder().decode(keyPEM);
			PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
			KeyFactory keyFactory = KeyFactory.getInstance("RSA");
			return keyFactory.generatePrivate(keySpec);
		}

		// 메시지 서명
		private static String signMessage(String message, PrivateKey privateKey) throws Exception {
			Signature signature = Signature.getInstance("SHA256withRSA");
			signature.initSign(privateKey);
			signature.update(message.getBytes());

			byte[] signedBytes = signature.sign();
			return Base64.getEncoder().encodeToString(signedBytes);
		}
	%>
	<%
		response.setHeader("Pragma","no-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);

		request.setCharacterEncoding("UTF-8");

		/**
		 * 가이드 url : https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=112038656
		 *
		 * 샘플 자바 소스를 확인하여 AUD7 플랫폼용 토큰 발행 API를 호출한다. jsp 에서 처리하는 부분을 서버 영역에서 처리하여 호출하는 방식 추천
		 * Application 인증용 id와 시크릿 key 는 AUD7 플랫폼 관리자를 통해 발급 받는다.
		 * 연동할 Application 서버에서는 기본 open ssh를 통해 ssh 공개키.개인키를 생성한 후 공개키를 aud7 플랫폼에 등록한다.
		 * ssh-keygen -t rsa -b 4096 -C "aud7-common"
		 **/
		String audSecretKey = "3E5D25E826E94D84B5907F2D8A52563B";
		String audApId = "matrix";

		/**
		 실제 인증시켜야 할 계정 .
		 audApId로 처리해도 무방할 경우에 따로 설정 안해도 상관 없습니다.
		 단 , 설정한 id는 AUd7 플랫폼 내에 User List에 등록되어 있는 id로 설정
		*/
		String userCode = "matrix";

		// 서버 통신 방식이기때문에 ip:port를 통해 AUD7 플랫폼 Portal 접속이 가능하면 설정하고 도메인 url 통신만 가능하다면 해당 서버에서 도메인 통신 확인 후 진행.
		String AUD_AP_TOKEN_URL = "http://[AUD플랫폼 서비스 도메인]/api/auth/sign/ap/token";
		// 쿠키에 발급한 aud 인증 jwt 토큰을 공유하기 위한 도메인 설정.
		String AUD_AP_TOKEN_UPDATE_URL = ".bimatrix.com";

		HttpURLConnection connection = null;
		String apToken = null;
		String apAccessToken = null;
		int responseCode = 0;

		try{
			if ((audApId == null || audApId.isEmpty()) || (audSecretKey == null || audSecretKey.isEmpty())){
				out.print("AUD 플랫폼에서 application 인증을 위한 id와 시크릿 키에 대한 정보가 없습니다.");
				return;
			}

			// aud7 플랫폼에서 발급받은 secret key를 ssh의 private key로 서명하여 전달한다.
			PrivateKey privateKey = loadPrivateKey("/ssh_key/private_key.pem");
			// aud7 secret key 서명 생성
			String signedMessage = signMessage(audSecretKey, privateKey);

			// header 설정은 아래처럼 해주세요.
			Map<String, String> requestHeaders = new HashMap();
			requestHeaders.put("X-AUD-AP-Id", audApId);
			requestHeaders.put("X-AUD-AP-Secret-SSH", signedMessage);
			requestHeaders.put("X-AP-UPDATE-ADDR" , AUD_AP_TOKEN_UPDATE_URL);
			if (userCode != null || !userCode.isEmpty())
				requestHeaders.put("X-AUD-USER" , userCode);

			try{
				// URL 객체 생성
				URL url = new URL(AUD_AP_TOKEN_URL);
				connection = (HttpURLConnection) url.openConnection();
			}catch(MalformedURLException e){
				out.print("AUD 플랫폼 주소가 잘못되었습니다.");
				return;
			}catch(IOException e){
				out.print("연결이 실패했습니다 [api url:"+ AUD_AP_TOKEN_URL +"]");
				return;
			}

			// HTTP 메서드 설정
			connection.setRequestMethod("POST");
			for(Map.Entry<String, String> header :requestHeaders.entrySet()) {
				connection.setRequestProperty(header.getKey(), header.getValue());
			}
			// 응답 코드 확인
			responseCode = connection.getResponseCode();

			if (responseCode == HttpURLConnection.HTTP_OK){
				apAccessToken = connection.getHeaderField("bimatrix_ap_accessToken");
				if (apAccessToken == null){
					out.println("ap token이 정상적으로 발급되지 않았습니다");
					out.println(responseCode);
					out.println(HttpURLConnection.HTTP_OK);
					return;
				}
				else{
					apToken = apAccessToken;
				}
			}else if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED){
				out.print("만료된 ap token 입니다.");
				return ;
			}

		}catch(Exception e){
			e.printStackTrace();
		}finally {
			if (connection != null) {
				connection.disconnect();
			}
		}

		Map<String, String> data = new HashMap();
		Enumeration<?> paramNames = request.getParameterNames();

		while(paramNames.hasMoreElements()) {
			String key = (String) paramNames.nextElement();
			if(key.toUpperCase().indexOf("VS_")==0 || key.toUpperCase().indexOf("VN_")==0 || key.toUpperCase().indexOf("V_")==0) {
				String value = request.getParameter(key);
				data.put(key , value);
			}
		}

		StringBuilder json = new StringBuilder();
		json.append("{");
		for (Map.Entry<String, String> entry : data.entrySet()) {
			json.append("\"").append(entry.getKey()).append("\": \"")
					.append(entry.getValue()).append("\", ");
		}

		// 마지막 쉼표 제거
		if (data.size() > 0)
			json.setLength(json.length() - 2);

		json.append("}");

	%>
	<script type="text/javascript" src="./jquery-3.6.0.min.js"></script>
	<!-- aud7 embedded setting jsp file path -->
	<script type="text/javascript" src="./aud/aud.embedded.setting.jsp"></script>
	<script type="text/javascript">
	</script>

</head>
<body>
<script>
	var biServerUrl = AUD_CONFIG_DATA.bimatrix_server_url;
	var webRoot = AUD_CONFIG_DATA.webRoot;
	var apAccessToken = '<%=apAccessToken%>';
	var responseCode = '<%=responseCode%>';	 	

	window.onload = function() {
		console.log("onload");
		// 맨 처음 로딩 시 또는 외부 포탈 로그인 시에 발급받은 AUD 플랫폼 AP token을 쿠키에 설정 또는 전역 변수로 가지고 있어 매번 url 호출 시 전달
		setCookie('bimatrix_ap_accessToken', '<%=apToken%>', 1);
		winResizer();
		openReport("REPA0C74823A2F24AD980BA19538CF4C494", true , "SD");
		setGlobalParams('<%=json.toString()%>');
	}

	window.addEventListener('resize', function(event){
		winResizer();
	});

	var winResizer = function(){
		console.log('winResizer===');
		var win_w = $(window).eq(0).outerWidth();
		var win_h = $(window).eq(0).outerHeight();

		var top_panel_height = $('.top_panel').outerHeight();
		var left_panel_width = $('.left_panel').outerWidth();
		var foot_panel_height = $('.foot_panel').outerHeight();

		$('.left_panel').css('height', win_h - top_panel_height);
		$('.left_panel').css('top', top_panel_height);

		$('.main_group').css('height', win_h - top_panel_height - foot_panel_height);
		$('.main_group').css('top', top_panel_height);
		$('.main_group').css('left', left_panel_width);
		$('.main_group').css('width', win_w - left_panel_width);

		// i-AUD 보고서 영역의 title 및 버튼 영역에 대한 resize
		const iframe1 = document.querySelector('#REPORT_AUD');
		iframe1.contentWindow.postMessage('resize', '*');
	}

	var setCookie = function (cookie_name, value, days) {
		deleteCookie(cookie_name);

		var exdate = new Date();
		exdate.setDate(exdate.getDate() + days);
		// 설정 일수만큼 현재시간에 만료값으로 지정
		var cookie_value = escape(value) + ((days == null) ? '' : '; expires=' + exdate.toUTCString() + ';path=/;domain='+AUD_CONFIG_DATA.cookie_domain);
		document.cookie = cookie_name + '=' + cookie_value;
	}

	function deleteCookie(name) {
		document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain='+AUD_CONFIG_DATA.cookie_domain;
	}

	function gfnGetCookie(key) {
		const cookies = document.cookie.split(';');
		for (let cookie of cookies) {
			cookie = cookie.trim();

			// 쿠키 이름이 일치하는지 확인
			if (cookie.startsWith(key + '=')) {
				return cookie.substring((key + '=').length);
			}
		}

		return null;
	}

	// 보고서 오픈시에 사용하는 로직 ==========================================
	var gvModule = "";
	var AUD_VIEWER = null;

	var openReport = function(code , isTileShow , moduleCode){
		// AUD7 인증 확인
		if (aud7AuthCheck()){
			// VS_ , VN_에 대한 전역변수 Parameter 설정
			var PARAM_ARR = [];

			var frm = $('#frm');

			$.each(AUD_CONFIG_DATA.global_params, function(key, val) {
				frm.append('<input type="hidden" id="'+key+'" name= "'+key+'" value="'+val+'" />');
				PARAM_ARR.push({'KEY':key, 'VALUE':val});
			});

			switch(moduleCode) {
				case "SD": // i-aud
				case "SX":
					var REPORT_AUD = $('#REPORT_AUD')[0].contentWindow;
					AUD_VIEWER = $('#REPORT_AUD');
					var okDispose = fnDisposeAudViewer(REPORT_AUD);

					if(okDispose) {
						// 기존 i-AUD iframe 재사용
						//PARAM_ARR.push('VS_TEST=파라메터전달Test');
						REPORT_AUD.AUD.SetCustomParams(PARAM_ARR);
						REPORT_AUD.fnOpen(code , isTileShow , moduleCode);
						fnSetViewerStatus(moduleCode);
					}else{
						// i-AUD 최초 실행
						fnPurgeIFRAME(AUD_VIEWER).then(function(){
							AUD_VIEWER = $('<iframe id="REPORT_AUD" name="REPORT_AUD" width="100%" height="100%" frameborder="0" scrolling="no" class="HideFrame" ></iframe>');
							var parent = $('.main_group');
							parent.append(AUD_VIEWER);

							frm.attr({'target':'REPORT_AUD', 'action':webRoot+'/aud/iaud_main.jsp'});
							frm.append('<input type="hidden" id="audServerUrl" name="audServerUrl" value="' + AUD_CONFIG_DATA.bimatrix_server_url + '" />');
							frm.append('<input type="hidden" id="webRoot" name="webRoot" value="' + webRoot + '" />');
							frm.append('<input type="hidden" id="id" name="id" value="' + code + '" />');
							frm.append('<input type="hidden" id="isTitle" name="isTitle" value="' + isTileShow + '" />');
							frm.append('<input type="hidden" id="mCode" name="mCode" value="' + moduleCode + '" />');
							//frm.append('<input type="hidden" id="VS_TEST" name="VS_TEST" value="파라메터전달TEST" />');
							frm.submit();

							fnSetViewerStatus(moduleCode);
						});
					}

					break;
			}

			$('.main_group').removeClass('SiteHideFrame').addClass('SiteVisibleFrame');
		}
	}

	// 보고서별 iframe에 대한 화면 표시 여부 전환 상태 업데이트용
	var fnSetViewerStatus = function(module){
		if (module == "SD" || module == "SX"){ // i-AUD 보고서
			if(typeof(AUD_VIEWER) != "undefined" && AUD_VIEWER != null) {
				AUD_VIEWER.removeClass('HideFrame').addClass('VisibleFrame');
			}
		}
	}

	var fnPurgeIFRAME = function($frame) {
		var deferred = $.Deferred();
		$frame.on("load", function(){
			var frame = this;
			frame.contentWindow.document.innerHTML = '';
			$frame.remove();
			deferred.resolve();
		});
		$frame.attr('src', 'about:blank');
		return deferred.promise();
	}

	// i-AUD 제품 보고서 오픈 시, iframe에 남아있는 viewer dispose
	var fnDisposeAudViewer = function(VIEWER) {
		// i-AUD 제품 체크
		if(typeof VIEWER.AUD == "function") {
			var audViewer = VIEWER.AUD.GetMainViewer();
			if(audViewer && typeof audViewer.Dispose == "function") {
				try {
					audViewer.Dispose();
					return true;
				} catch(e) {
					console.log("i-aud viewer dispose error -  " + e.message);
					return false;
				}
			}
		}

		return false;
	};
	// ================================================================================================

	function openPopReport(reportCode){
		var winWidth = $( window ).width() - 100;
		var winHeight = $( window ).height() - 100 ;

		if (reportCode) {
        window.open(biServerUrl + "/portal/popupView.jsp?id=" + reportCode, "reportPop", "width=" + winWidth + ",height=" + winHeight + ",resizable=yes");
    	} else {
        window.open(biServerUrl + "/portal/Content.jsp", "reportPop", "width=" + winWidth + ",height=" + winHeight + ",resizable=yes");
    	}
	}

	// 토큰에 대한 인증 확인
	function aud7AuthCheck() {
		var xmlhttp = null;
		if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
		else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		xmlhttp.open("POST", biServerUrl+"/portal/service/servlet_action.jsp", false); //동기
		xmlhttp.withCredentials = true;
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		const params = "cname=check.session&isPortal=false";

		xmlhttp.send(params);

		if (xmlhttp.status === 200) {
			var authData = JSON.parse(xmlhttp.responseText);
			console.log("==== authCode:" + authData.retCode);
			if (authData.retCode == 0) {
				return true;
			} else {
				alert("token error. Token reissue check");
				return false;
			}
		} else {
			console.error("HTTP request failed with status:", xmlhttp.status);
			return false;
		}
	}

	function audApiCall(apiUrl , params){
		fetch(biServerUrl + apiUrl, {
			method: 'POST', // 또는 'POST', 'GET'
			headers: {
				'Content-Type': 'application/json'
			},
			credentials: 'include', // 쿠키를 포함하여 요청하려면 사용
			body: JSON.stringify(params)
		})
				.then(response => {
					if (!response.ok) {
						throw new Error('Network response was not ok');
					}
					return response.json(); // 응답을 JSON으로 변환
				})
				.then(data => {
					alert(JSON.stringify(data));
				})
				.catch(error => {
					console.error('There has been a problem with your fetch operation:', error);
					alert('데이터를 가져오는데 실패했습니다.');
				});
	}

</script>
<div id="wrapper" ondragstart="return false" oncontextmenu="return false" onselectstart="return false"><!-- onmousedown="return false;"  -->
	<div class="top_panel">
	</div>

	<div class="left_panel">
		<ul>
			<li>
				<div class='rep_div' onclick='openPopReport()'>팝업으로 메인 화면 호출</div>
			</li>
			<li>
				<div class='rep_div' onclick='openPopReport("REPA0C74823A2F24AD980BA19538CF4C494")'>팝업으로 보고서 호출</div>
			</li>
			<li>
				<div class='rep_div' onclick='audApiCall("/api/user/concurrent/user/auth/info", "")'>사용자 세션 정보 조회 API</div>
			</li>
			<li>
				<div class='rep_div' onclick='audApiCall("/api/portal/tree/main-menu", { "folderCode": "DEFAULT" })'>사용자 트리 보고서 목록 조회 API</div>
			</li>
		</ul>
	</div>

	<div class="main_group VisibleFrame">
		<iframe id="REPORT_AUD" name="REPORT_AUD" width="100%" height="100%" frameborder="0" scrolling="no" class="VisibleFrame" ></iframe>
	</div>
	<div class="foot_panel">
	</div>

</div>
<form id="frm" name="frm" method="post" target="" action=""></form>

</body>
</html>



코드 블럭
themeMidnight
titleaud.embedded.setting.jsp 샘플 소스
linenumberstrue
collapsetrue
<%@ page language="java" contentType="application/javascript; charset=UTF-8" pageEncoding="UTF-8"%>

    var AUD_CONFIG_DATA = {};
    try {
        AUD_CONFIG_DATA.bimatrix_server_url = "http://[AUD플랫폼 Ip:Port]";
        AUD_CONFIG_DATA.webRoot = "/matrix";
        AUD_CONFIG_DATA.cookie_domain = ".bimatrix.co.kr";

        AUD_CONFIG_DATA.global_params = {} ;
        var setGlobalParams = function(datas) {
            if(typeof datas == "string"){
                AUD_CONFIG_DATA.global_params = JSON.parse(datas);
            }
        }

        /** 제공되는 버튼 id list
         * btnEdit : 보고서 편집
         * btnRefresh : 실행
         * btnSaveAs : 다른 이름으로 저장
         * btnExport : 내보내기
         * btnPrint : 출력
         * btnProperties : 속성 (i-Matrix 전용)
         * btnScreenArrange : 화면 arrange (i-Matrix 전용)
         **/
        AUD_CONFIG_DATA.button_disable_ids = "btnEdit;btnSaveAs";

        // i-AUD 제품 설정 정보

        // i-Matrix 제품 설정 정보
        AUD_CONFIG_DATA.imatrix_afterOpenRefresh = "false";
        AUD_CONFIG_DATA.imatrix_mxserviceVersion = "106";
        AUD_CONFIG_DATA.imatrix_used_bottom = "N";
        AUD_CONFIG_DATA.imatrix_bottom_foot_margin = "1"; // foot 영역 margin
        AUD_CONFIG_DATA.imatrix_bottom_top_margin = "40"; // top 영역 margin

    } catch (e) {
        AUD_CONFIG_DATA = {};
        alert("aud.embedded.setting.jsp : " + e.message);
    }





정보
titleiFrame 샘플 소스

View file
name외부 포탈 임베디드(iFrame) 소스.zip
height250