Stream Wrapper 라이브러리
본 모듈은 EIMS에서 파일을 업로드하는 API에서 사용되는 InputStream 전처리 기능을 제공합니다.
특정 사이트에서는 엑셀과 같은 민감한 파일에 DRM(Digital Rights Management)을 사용하는 경우가 있습니다. 이 경우 EIMS에서 파일을 바로 읽을 수 없기 때문에, 사용자가 직접 DRM 해제 로직 또는 기타 커스텀 전처리 로직을 작성할 수 있는 기능을 제공합니다.
본 모듈은 InputStream으로 전달된 파일 내용을 파라미터로 받아, DRM 해제 또는 기타 사용자 커스텀 조작이 적용된 InputStream을 반환하는 인터페이스를 제공합니다.
라이브러리 적용 API
본 모듈이 적용되는 파일 업로드 API는 다음과 같습니다.
| API | URL | Method | 설명 |
|---|---|---|---|
MessageFieldController#excelConvert |
/v1/message-field/excel |
POST |
메시지 필드 엑셀 업로드 |
InterfaceTemplateController#read |
/v1/interface-template |
POST |
인터페이스 템플릿 엑셀 업로드 |
클래스
StreamIOWrapper
InputStream을 전처리하기 위한 인터페이스입니다.
public interface StreamIOWrapper {
boolean supports(InputStream stream);
InputStream process(InputStream inputStream);
}
| 메서드 | 반환 타입 | 설명 |
|---|---|---|
supports(InputStream stream) |
Boolean |
현재 InputStream이 본 구현체에서 처리 가능한지 판단 |
process(InputStream inputStream) |
InputStream |
InputStream을 읽어 전처리된 InputStream을 반환 |
구현 예시
다음은 DRM을 해제하는 경우의 예시입니다.
package com.example.stream;
import com.tmax.anyeims.external.stream.StreamIOWrapper;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public class DrmStreamIOWrapperImpl implements StreamIOWrapper {
@Override
public boolean supports(InputStream stream) {
// 1. InputStream이 DRM으로 암호화되어 있는지 판단
// 예: 파일 헤더를 읽어 DRM 여부 확인
try {
byte[] header = new byte[4];
stream.mark(4);
stream.read(header);
stream.reset();
// DRM 파일 시그니처 확인 (예시)
return isDrmEncrypted(header);
} catch (Exception e) {
return false;
}
}
@Override
public InputStream process(InputStream inputStream) {
// 2. DRM 해제 로직 수행
try {
byte[] encryptedData = inputStream.readAllBytes();
// DRM 해제 처리 (사이트별 DRM 라이브러리 사용)
byte[] decryptedData = decryptDrm(encryptedData);
return new ByteArrayInputStream(decryptedData);
} catch (Exception e) {
throw new RuntimeException("DRM 해제 실패", e);
}
}
private boolean isDrmEncrypted(byte[] header) {
// DRM 파일 시그니처 확인 로직
// ...
return true;
}
private byte[] decryptDrm(byte[] encryptedData) {
// DRM 해제 로직
// ...
return encryptedData;
}
}
배포 및 설정
의존성 추가
Stream Wrapper 프로젝트에서 이 라이브러리를 사용하려면 JAR 파일을 직접 프로젝트에 추가합니다.