我的源代码在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"我浏览了多个帖子,比如这 one关于--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我是在这里遗漏了什么,还是在传递的参数中出现了语法错误?
没有进行任何其他配置。
任何帮助都是非常感谢的。谢谢。
发布于 2022-04-27 05:07:12
通过使用--add-reads而不是--add-opens来解决这个问题。
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-reads jdk.crypto.ec=ALL-UNNAMED"
https://stackoverflow.com/questions/71995771
复制相似问题