问题
I have a microservice that has a REST endpoint and a WebSocket endpoint.
It Spring-wires Grizzly and Tyrus, and adds in authentication via SSO using a JAX-RS filter and a ServerEndpointConfig.Configurator. I've added in SSL to the REST endpoint using SSLContextConfigurator and SSLEngineConfigurator and a (currently) self-signed certificate.
I don't see a way to do the same for org.glassfish.tyrus.server.Server
in Tyrus 1.14.
In fact, the code hardwires the protocol name, which makes me wonder if this is even possible:
LOGGER.info("WebSocket Registered apps: URLs all start with ws://" + this.hostName + ":" + this.getPort());
There's a similar question here but it requires deploying a WAR file to a full-on Glassfish instance. I want to do this programmatically.
回答1:
Solved using the suggestion at 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));
Where getSslContextConfigurator
constructs a org.glassfish.grizzly.ssl.SSLContextConfigurator
with a keystore byte[] and password.
来源:https://stackoverflow.com/questions/53849572/how-can-i-programmatically-enable-wss-for-a-tyrus-websocket-serverendpoint