엑셀 파일을 다운로드할 때, 보안을 위해 비밀번호를 설정하는 방법은 크게 두 가지 방식으로 나뉩니다.

  • 서버 모듈 방식

  • 클라이언트 모듈 방식



 [서버 모듈 방식] 비밀번호 설정 방법

엑셀 다운로드 시 서버에서 비밀번호를 설정하려면 다음 조건을 만족해야 합니다.


[비밀번호 설정 조건]

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

2025년 2분기 신규기능