IntelliJ IDEA启动GlassFish 5.0.1报错java.lang.NoClassDefFoundError: sun/security/util/CurveDB
IntelliJ IDEA启动GlassFish 5.0.1管理后台空白问题解决
问题现象
使用IntelliJ IDEA搭建GlassFish 5.0.1运行环境,出现如下异常表现:
- 通过IDEA启动服务后,8080端口默认页面访问正常,4848端口的管理后台显示空白页
- 直接从GlassFish的bin目录手动启动服务,所有功能均正常
- 运行环境为JDK 1.8
异常栈信息
控制台抛出的错误栈如下:
java.lang.NoClassDefFoundError: sun/security/util/CurveDB at sun.security.ec.SunEC.putEntries(SunEC.java:118) at sun.security.ec.SunEC.<init>(SunEC.java:82) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:221) at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:206) at java.security.AccessController.doPrivileged(Native Method) at sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:206) at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:187) at sun.security.jca.ProviderList.getProvider(ProviderList.java:233) at sun.security.jca.ProviderList.getService(ProviderList.java:331) at sun.security.jca.GetInstance.getInstance(GetInstance.java:157) at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156) at com.sun.enterprise.security.ssl.SSLUtils.getSSLContext(SSLUtils.java:146) at com.sun.enterprise.security.ssl.SSLUtils.postConstruct(SSLUtils.java:126) at org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:327) at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:375) at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487) at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:83) at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:71) at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154) at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199) at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:122) at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2126) at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:116) at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:698) at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:78) at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:212) at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:235) at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:358) at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487) at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:83) at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:71) at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154) at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199) at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:122) at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2126) at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:116) at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:90) at com.sun.enterprise.security.ee.SecuritySniffer.setup(SecuritySniffer.java:134) at com.sun.enterprise.v3.server.ContainerStarter.startContainer(ContainerStarter.java:97) at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainer(ApplicationLifecycle.java:997)
解决方案
按以下步骤操作即可修复问题:
- 确认IDEA中GlassFish运行配置使用的JDK版本,和本地手动启动GlassFish时的JDK 1.8版本完全一致,避免版本差异导致的类加载失败
- 打开IDEA的GlassFish运行配置界面,在「VM选项」输入框中添加如下参数:
-Djdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, include jdk.disabled.namedCurves - 若添加上述参数后仍无法正常访问,可额外添加禁用SunEC安全提供程序的参数:
-Dsecurity.provider.1=sun.security.provider.Sun -Dsecurity.provider.2=com.sun.net.ssl.internal.ssl.Provider -Dsecurity.provider.3=com.sun.crypto.provider.SunJCE -Dsecurity.provider.4=sun.security.rsa.SunRsaSign - 保存配置后重启GlassFish服务,4848管理后台即可正常加载
内容的提问来源于stack exchange,提问作者Alder Isaac Solis de Leon
相关产品推荐
相关产品推荐

