엑셀 파일을 다운로드할 때, 보안을 위해 비밀번호를 설정하는 방법은 크게 두 가지 방식으로 나뉩니다.
서버 모듈 방식
클라이언트 모듈 방식
[서버 모듈 방식] 비밀번호 설정 방법
엑셀 다운로드 시 서버에서 비밀번호를 설정하려면 다음 조건을 만족해야 합니다.
[비밀번호 설정 조건]
1) down2Excel 함수를 사용해야 함
2) 다운로드 대상 파일 확장자는 반드시 .xlsx
3) POI 라이브러리(버전 3.10 이상)가 WEB-INF/lib에 있어야 함
down2Excel.jsp 에 보면 패스워드 설정하는 부분(getWorkbookPassword)이 있습니다.
다운로드 1번을 주석처리하고 2번을 사용하여 패스워드 설정이 가능합니다.
. . . // 다운로드 1. 생성된 문서를 브라우저를 통해 다운로드 // down.downToBrowser(); --> 주석 // 다운로드 2. 생성된 엑셀 문서를 서버에 저장 //주석 해제 String fileName = down.getFileName(); // Password를 사용하려면 이 부분에서 IBSheet에서 전달된 패스워드를 취득해야 합니다. String passWord = down.getWorkbookPassword(); down.saveToFile("d:/"); // 생성된 엑셀 문서를 다운로드 처리(이 부분에서 엑셀문서를 DRM 처리함) File file = new File("d:/" + fileName); // 패스워드 설정은 XLSX 형식의 파일이 대상이고 POI 라이브러리를 사용할 때만 가능합니다. if (fileName.toLowerCase().endsWith(".xlsx") && !"".equals(passWord)) { File pFile = new File("d:/encrypt.xlsx"); FileOutputStream fout = new FileOutputStream(pFile); //서버 내에 암호화된 엑셀파일을 생성합니다. com.ibleaders.ibsheet.excel.ProtectXLSX.encryptXLSX("d:/", passWord, file, fout); //원본 파일을 지웁니다. file.delete(); //다운로드할 대상을 암호화된 엑셀파일로 설정합니다. file = pFile; } //서버 내에 저장된 파일을 다운로드. try { if (file.isFile()) { int fileLength = (int)file.length(); // 사용자의 브라우저에 다운로드할 파일의 정보를 전달합니다. down.setFileHeader(); response.setContentLength(fileLength); FileInputStream fileIn = new FileInputStream(file); ServletOutputStream out3 = response.getOutputStream(); byte[] outputByte = new byte[fileLength]; while (fileIn.read(outputByte, 0, fileLength) != -1) { out3.write(outputByte, 0, fileLength); } fileIn.close(); out3.flush();; out3.close(); } } finally { file.delete(); } . . .
[클라이언트 모듈 방식] 비밀번호 설정 방법
클라이언트 방식은 직접적인 암호 설정 기능이 제공되진 않지만, blob 데이터로 받은 엑셀 파일을 클라이언트에서 암호화 처리하는 방식으로 구현할 수 있습니다.
[비밀번호 설정 방법]
1) exportData 함수에서 Blob 데이터를 추출
2) onBeforeExport 이벤트에 evtParam.data.blob 속성을 받아 암호화 처리
3) xlsx-populate.js 라이브러리를 이용해 비밀번호 설정
Ver 8.3.0.5-20250424-14 버전 부터 onBeforeExport 이벤트에서 엑셀 다운 전 Blob 데이터를 받을 수 있는 인자인 data 인자가 추가되었습니다.
evtParam.data.blob 으로 blob 데이터를 받아 이용할 수 있습니다.
[예제 : 비밀번호 입력 시 엑셀에 비밀번호 설정됨]
클라이언트 모듈에서 엑셀에 비밀번호 설정하는 예제) https://jsfiddle.net/gbneL2jq/
ALSO