我有一个具有REST端点和WebSocket端点的微服务。
它通过弹簧连接Grizzly和Tyrus,并使用JAX-RS过滤器和ServerEndpointConfig.Configurator通过SSO添加身份验证。我已使用SSLContextConfigurator和SSLEngineConfigurator以及(当前)自签名证书将SSL添加到REST端点。
在Tyrus 1.14中,我看不到对org.glassfish.tyrus.server.Server
做同样的事情。
实际上,该代码对协议名称进行了严格的布线,这使我想知道这是否可能:
LOGGER.info("WebSocket Registered apps: URLs all start with ws://" + this.hostName + ":" + this.getPort());
存在类似的问题here,但它需要将WAR文件部署到完整的Glassfish实例。我想以编程方式执行此操作。
答案 0 :(得分:0)
使用https://stackoverflow.com/a/27239122/17641
的建议解决了
listener = new NetworkListener("grizzly", "0.0.0.0", port);
listener.setSecure(true);
listener.setSSLEngineConfig(new SSLEngineConfigurator(getSslContextConfigurator()).setClientMode(false).setNeedClientAuth(false));
getSslContextConfigurator
在其中构造org.glassfish.grizzly.ssl.SSLContextConfigurator
并带有密钥库字节[]和密码的地方。
答案 1 :(得分:0)
我设法通过上面的变体使它开始工作。但是,我强烈建议不要这样做,因为它的性能很差。与Tyrus或Grizzly无关,而与Java无关。众所周知,Java中的SSL库运行缓慢,并且由于Grizzly使用Java,因此任何WSS都将受到影响。
显然,Jetty和Tomcat提供了一种使用OpenSSL而不是标准Java SSL的方法。另外,也可以使用处理SSL的SSL终结器(例如Apache Web服务器或HAProxy),并将标准WS连接传递到服务器