java.lang.NoClassDefFoundError:sun / security / ssl / SupportedEllipticCurvesExtension

时间:2018-03-05 14:09:03

标签: security java-ee glassfish netbeans-8 glassfish-5

我正在尝试保护Web应用程序,以便我可以使用带有HTTPS的安全数据传输层TLS / SSL。我正在使用glassfish服务器5.启动服务器后,我做了一个https://localhost:8181,它给了我这个例外:

    Warning:   GRIZZLY0013: Exception during FilterChain execution
java.lang.NoClassDefFoundError: sun/security/ssl/SupportedEllipticCurvesExtension
    at sun.security.ssl.HelloExtensions.<init>(HelloExtensions.java:82)
    at sun.security.ssl.HandshakeMessage$ClientHello.<init>(HandshakeMessage.java:362)
    at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:223)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:984)
    at sun.security.ssl.Handshaker$1.run(Handshaker.java:924)
    at sun.security.ssl.Handshaker$1.run(Handshaker.java:921)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1379)
    at org.glassfish.grizzly.ssl.SSLUtils.executeDelegatedTask(SSLUtils.java:274)
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:708)
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:622)
    at org.glassfish.grizzly.ssl.SSLBaseFilter.handleRead(SSLBaseFilter.java:334)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
    at java.lang.Thread.run(Thread.java:748)

浏览器(firefox)显示: error

可能是什么问题?

5 个答案:

答案 0 :(得分:10)

这看起来与this bug的问题相同,这是由Java 8 162的更改引起的,其中该类已重命名。这是修改了this bug的OpenJDK here已被更改Payara 5.182,但不幸的是,这是一个重大变化,在重新命名该类时引入了这个问题。

另一种方法是使用SQL FIDDLE,一个玻璃鱼叉,其中包含一个修复程序。

答案 1 :(得分:5)

我调查了bug@Jonathan Coustick所提到的his answer。问题的根源是Glassfish(或Payara)使用的是旧版本的em.merge()。因此,我认为也许用更新的版本替换grizzly可以解决问题。

此JAR文件位于grizzly-npn-bootstrap.jar目录(对于 GlassFish 服务器)和<glassfish-root>/glassfish/modules/endorsed目录(对于 Payara 服务器)。 1.7之前的版本会出现此错误。因此,我从maven.org那里获得了最新版本(当前是1.9),它像一种魅力。

这里是download link

答案 2 :(得分:0)

哇。那真是个臭虫。 就我而言,我使用Java JDK 8.121并尝试从我的Glassfish 5.1服务器打开TLS URLConnection。 结果就是这个异常:

java.lang.NoClassDefFoundError: sun/security/ssl/HandshakeStateManager

解决方案是将JDK更新到版本8.201。

答案 3 :(得分:0)

我在payara服务器中发现了相同的错误。 从payara服务器中删除“ grizzly-npn-bootstrap.jar”文件。

在payara服务器上,“ grizzly-npn-bootstrap.jar”文件的位置为 “ [root-payara] / glassfish / lib”。

Windows“ c:/ users / [用户名] / Payara服务器”中的默认[root-payara]文件夹

答案 4 :(得分:-4)

NoClassDefFoundError当类信息未加载到内存中时,通常会生成错误。有必要检查实际类文件的位置引用是否无效或类文件是否存在。