Websocket 连接失败 - Jetty 7.6 使用 SSL + java 11 但在 Java 8 中工作

Websocket connection failure - Jetty 7.6 using SSL + java 11 but works in Java 8

我们在本地使用 SSL 有码头服务器 运行,每当我们尝试使用 websocket 连接时,chrome 会抛出连接失败错误。

Server server = new Server();
            
            SslContextFactory sslContextFactory = new SslContextFactory();
            InputStream stream = 
           
      websocket.class.getResourceAsStream("path to keystore.jks");

            KeyStore ks = KeyStore.getInstance("JKS");
            ks.load(stream, "password".toCharArray());
            
            sslContextFactory.setKeyStore(ks);
            sslContextFactory.setKeyStoreType("JKS");
            sslContextFactory.setKeyStorePassword(Constants.keyStorePasswordMaster);
            
            SslSelectChannelConnector sslConnector = new 
            SslSelectChannelConnector(sslContextFactory);
            sslConnector.setPort(8083);
            server.addConnector(sslConnector);   
            
            ServletContextHandler handler = new 
            ServletContextHandler(ServletContextHandler.SESSIONS);
            handler.setContextPath("/server/ws");
            server.setHandler(handler);
            handler.addServlet(PingServlet.class, "/ping");
        
            server.start();   
            LOG.info("end setUpSSLSelectChannel() and secure jetty started");

PS :相同的代码适用于 Java 8 仅适用于 java 11 我们遇到了这个问题。非常感谢任何帮助

Jetty 7.x 和 8.x 与 Java 11 不兼容。

查看关于此主题的过去答案:

Jetty 7.x 早在 2014 年就宣布停产。

查看 Jetty 版本 Table:https://www.eclipse.org/jetty/download.php#version-table

您需要使用 Jetty 9.4.x 系列以获得对 Java 11.

的最低支持

如果您需要对 Java 11 的全面支持,请使用 Jetty 10.x(旧的 javax.* 命名空间)或 Jetty 11.x(新的 jakarta.*命名空间)

另外请注意,Jetty 7.x 和 8.x 上的 WebSocket 支持是针对 WebSocket 草稿的,而不是最终规范。目前没有浏览器支持旧的草稿版本。您至少需要使用 Jetty 9.x 才能获得适当的 websocket 支持。