Develop
[JDK, PASS] cannot access class com.sun.crypto.provider.SunJCE
너드나무
2024. 6. 20. 17:40
반응형
서론
나이스평가정보 PASS 본인안심확인 서비스를 연동하는 도중 JDK 11 에서는 문제 없었으나,
JDK 17이 적용된 프로젝트에서 발생한 이슈에 대해 정리해본다.
참고 배경
- Gradle 9.0
- Gradle에 NiceId.jar를 추가하고 VM Option을 지정하였으나 실행 시 VM Option이 미적용되어 동일한 이슈가 발생되었다.
compileJava {
options.compilerArgs += ["--add-exports=jdk.compiler/com.sun.crypto.provider=ALL-UNNAMED"]
}
dependencies {
...
implementation files('libs/NiceId.jar')
}
- com.sun.crypto.provider.SunJCE
- com.sun.crypto.* 라이브러리는 java.security.Security.getInstance()로 변경되었다.
Java Cryptography Architecture Oracle Providers Documentation
AES ECB, CBC, PCBC, CTR, CTS, CFB, CFB8..CFB128, OFB, OFB8..OFB128 NoPadding, PKCS5Padding, ISO10126Padding PBEWithMD5AndDES, PBEWithMD5AndTripleDES, PBEWithSHA1AndDESede, PBEWithSHA1AndRC2_40, PBEWithSHA1AndRC2_128, PBEWithSHA1AndRC4_40, PBEWithSHA1AndRC4
docs.oracle.com
- 나이스평가정보 안심본인인증 jar
- NiceID_v1.1.jar로 지원받는 나이스평가정보 라이브러리는 com.sun.crypto.provider.SunJCE를 의존하고 있다.
- 외부 라이브러리를 커스텀하는 것은 좋지 않은 방법임으로 개발 프로젝트에서 해결해야 한다.
해결
- --add-exports, ALL-UNNAMED
- 장기적인 해결책이 아닌 임시 방편으로, 모듈 시스템의 캡슐화가 중단되어 JDK의 내부 API를 사용할 수 없게 된다.
- 하지만, JDK 17에는 com.sun.crypto.provider 모듈을 지원하지 않기 때문에 사용한다.
Java 8에서 Java 11로 전환 - Azure
Java 8에서 Java 11로의 전환을 관리하는 방법에 대한 가이드입니다.
learn.microsoft.com
- Intellij VM Options
- Run/Debug Configurations에 Add VM options를 반영한다.
--add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED
- Java Command Line
- -jar 옵션이 가장 마지막에 오는 것이 중요하다.
- 이전에 넣으면 이후 Arguments는 인식이 되지 않는다.
nohup /bin/java \
--add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED \
-Dspring.profiles.active=dev \
-Dserver.port=8080 \
-Dlogging.config=./logback-conf.xml \
-jar server.jar \
&> was1.log &
728x90
반응형