为什么无法远程访问 glassfish 管理控制台?
Why can't access to glassfish admin console remotely?
我在virtual box中有一个装有Centos7的虚拟机。我已经从这里安装了 glassfish 5.0:Full platform - glassfish 5.0。我只是将文件夹解压缩到 /opt 中。我正在使用 "host-only".
以下是我的java版本:
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
我已使用以下命令启用安全管理:
asadmin --host localhost --port 4848 enable-secure-admin
我进入 vm shell 和数字 "ifconfig" 以了解 ip。
然后,我进入我的 windows 主机的电源 shell (win + x) 并输入,通过 ssh 连接:
ssh user@x.x.x.x
然后:
cd /opt/glassfish5/bin
./asadmin start-domain domain1
然后我回到我的主机,我打开 google chrome 和:
- http://x.x.x.x:8080 看起来不错
- http://x.x.x.x:4848 强制使用 https,然后浏览器告诉我无法访问该网站
我已经尝试卸载安全管理(至少在 glassfish 给我异常之前,它说 DAS 或类似的东西需要安全管理):
./asadmin --host localhost --port 4848 disable-secure-admin
但我得到以下异常:
NCLS-ADMIN-00010
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Command disable-secure-admin failed.
调用管理控制台后,我的日志中出现以下异常:
[2018-05-16T16:35:59.644+0200] [glassfish 5.0] [WARNING] [] [org.glassfish.grizzly.filterchain.DefaultFilterChain] [tid: _ThreadID=42 _ThreadName=admin-listener(3)] [timeMillis: 1526481359644] [levelValue: 900] [[
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.run(Handshaker.java:924)
at sun.security.ssl.Handshaker.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.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.portunif.PUFilter.handleRead(PUFilter.java:231)
at org.glassfish.grizzly.filterchain.ExecutorResolver.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.access0(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)
]]
答案是您的 Java 版本对于 GlassFish 来说太新了。我已经在这里回答了这个问题:
要停止 java.lang.NoClassDefFoundError
,您需要使用不高于 8u151
的 Java 版本
This is due to a change in internal JDK classes which Grizzly uses for
HTTP/2.
GlassFish 5.0 does not have the latest version of Grizzly which is
compatible with the latest Java 8 updates. If you are using GlassFish
5.0 and see these errors, you have 2 choices:
- Downgrade Java to 8u152 or earlier
- Download the latest GlassFish 5.0.1 nightly, where this should be fixed
Ref:
https://github.com/javaee/glassfish/issues/22436#issuecomment-374829430
我在virtual box中有一个装有Centos7的虚拟机。我已经从这里安装了 glassfish 5.0:Full platform - glassfish 5.0。我只是将文件夹解压缩到 /opt 中。我正在使用 "host-only".
以下是我的java版本:
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
我已使用以下命令启用安全管理:
asadmin --host localhost --port 4848 enable-secure-admin
我进入 vm shell 和数字 "ifconfig" 以了解 ip。 然后,我进入我的 windows 主机的电源 shell (win + x) 并输入,通过 ssh 连接:
ssh user@x.x.x.x
然后:
cd /opt/glassfish5/bin
./asadmin start-domain domain1
然后我回到我的主机,我打开 google chrome 和:
- http://x.x.x.x:8080 看起来不错
- http://x.x.x.x:4848 强制使用 https,然后浏览器告诉我无法访问该网站
我已经尝试卸载安全管理(至少在 glassfish 给我异常之前,它说 DAS 或类似的东西需要安全管理):
./asadmin --host localhost --port 4848 disable-secure-admin
但我得到以下异常:
NCLS-ADMIN-00010
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Command disable-secure-admin failed.
调用管理控制台后,我的日志中出现以下异常:
[2018-05-16T16:35:59.644+0200] [glassfish 5.0] [WARNING] [] [org.glassfish.grizzly.filterchain.DefaultFilterChain] [tid: _ThreadID=42 _ThreadName=admin-listener(3)] [timeMillis: 1526481359644] [levelValue: 900] [[
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.run(Handshaker.java:924)
at sun.security.ssl.Handshaker.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.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.portunif.PUFilter.handleRead(PUFilter.java:231)
at org.glassfish.grizzly.filterchain.ExecutorResolver.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.access0(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)
]]
答案是您的 Java 版本对于 GlassFish 来说太新了。我已经在这里回答了这个问题:
要停止 java.lang.NoClassDefFoundError
,您需要使用不高于 8u151
This is due to a change in internal JDK classes which Grizzly uses for HTTP/2.
GlassFish 5.0 does not have the latest version of Grizzly which is compatible with the latest Java 8 updates. If you are using GlassFish 5.0 and see these errors, you have 2 choices:
- Downgrade Java to 8u152 or earlier
- Download the latest GlassFish 5.0.1 nightly, where this should be fixed
Ref: https://github.com/javaee/glassfish/issues/22436#issuecomment-374829430