我的源代码在java 7上编译,在java 11上运行。
我正试图将imperva RASP
集成为tomcat中的java代理。但是,当我启动tomcat服务器时,它抛出了以下异常:
Caused by: java.lang.IllegalAccessError: class sun.security.ec.ECDSASignature (in module jdk.crypto.ec) cannot access class com.imperva.rasp.AgentBridge (in unnamed module @0x66c61024) because module jdk.crypto.ec does not read unnamed module @0x66c61024
at jdk.crypto.ec/sun.security.ec.ECDSASignature.<init>(ECDSASignature.java:118)
at jdk.crypto.ec/sun.security.ec.ECDSASignature.<init>(ECDSASignature.java:106)
at jdk.crypto.ec/sun.security.ec.ECDSASignature$SHA1.<init>(ECDSASignature.java:214)
at jdk.crypto.ec/sun.security.ec.SunEC$ProviderService.newInstance(SunEC.java:102)
at java.base/java.security.Signature.isSpi(Signature.java:331)
我传递java代理的方式是:
JAVA_OPTS="-javaagent:$IMPERVA_JAR $JAVA_OPTS"
我读了很多文章,比如这篇关于--add-opens
论点的文章。基于此,我通过JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=jdk.crypto.ec/sun.security.ec=ALL-UNNAMED"
考试我可以在日志中看到以下语句:
Picked up JDK_JAVA_OPTIONS: --add-opens=jdk.crypto.ec/sun.security.ec=ALL-UNNAMED
我在这里错过了什么,或者我传递的参数中有任何语法错误吗?
没有其他配置
任何帮助都是感激的。谢谢你。
用--add-reads
代替--add-opens
成功解决。
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-reads jdk.crypto.ec=ALL-UNNAMED"