我有一个微服务,它有一个REST端点和一个WebSocket端点。
它对Grizzly和Tyrus进行了Spring连接,并通过使用JAX-RS过滤器和ServerEndpointConfig.Configurator的单点登录添加了身份验证。我已经使用SSLContextConfigurator和SSLEngineConfigurator向REST端点添加了SSL和一个(当前)自签名证书。
我没有看到在Tyrus1.14中对org.glassfish.tyrus.server.Server做同样的事情的方法。
事实上,代码硬连接了协议名称,这让我想知道这是否可能:
LOGGER.info("WebSocket Registered apps: URLs all start with ws://" + this.hostName + ":" + this.getPort());
还有一个类似的问题,here,但它需要将一个WAR文件部署到一个完整的Glassfish实例上。我想通过编程的方式来做这件事。
发布于 2018-12-20 18:42:05
使用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使用密钥库byte[]和密码构造一个org.glassfish.grizzly.ssl.SSLContextConfigurator。
发布于 2020-11-18 17:16:17
我设法使用上面的变体实现了这一点。但是,我强烈建议不要使用它,因为它的性能很糟糕。这与Tyrus或Grizzly无关,但与Java无关。Java中的SSL库是出了名的慢,而且因为Grizzly使用Java,任何WSS都会受到影响。
显然,Jetty和Tomcat提供了一种使用OpenSSL而不是标准Java SSL的方法。或者,使用SSL终结器(例如Apache web服务器或HAProxy)来处理SSL并将标准WS连接传递到服务器
https://stackoverflow.com/questions/53849572
复制相似问题