java - 在 grizzly 上设置 websocket SSL

标签 java ssl websocket tyrus

我正在尝试在 grizzly 容器上使用“javax.websocket.server.ServerEndpoint”配置基于 SSL 的 WebSocket。但是我找不到任何方法来将 SSL 属性设置到我的端点。

我的端点代码:

import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(
    Value="/ptiWs",
    decoders = {ApiMessage.ApiCoder.class},
)
public class WebsocketEndpoint {

   private static final Logger LOG = LogManager.getLogger(WebsocketEndpoint.class);
   private final ApiVisitorImpl apiVisitor;

    public WebsocketEndpoint(){
    }

    @OnOpen
    public void onOpen(Session session){
        LOG.info("New connection open : " + session.toString());
    }


    @OnMessage
    public void message(Session session, ApiMessage message){
        LOG.info("New message arrive " + message.toString());
    }
}

最后,我使用以下代码将端点添加到我的 Grizzly 实例:

Server ptiWebsocket = new Server("localhost", 8025, "/", null, WebsocketEndpoint.class);
ptiWebsocket.start();

我已经为 glassfish 完成了这项工作,这很容易,但在这里我找不到任何继续进行的方法。

和依赖:

   <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-api</artifactId>
        <version>1.0</version>
        <type>jar</type>
    </dependency>

    <dependency>
        <groupId>org.glassfish.tyrus</groupId>
        <artifactId>tyrus-server</artifactId>
        <version>1.7</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.tyrus</groupId>
        <artifactId>tyrus-container-grizzly-server</artifactId>
        <version>1.7</version>
    </dependency> 

谢谢

最佳答案

查看 tyrus 源代码,似乎不支持开箱即用。您需要创建一个与 org.glassfish.tyrus.container.grizzly.server.GrizzlyServerContainer 非常相似的新 ServerContainerFactory。去 Github 抓取代码。您可以创建自己的 GrizzlySSLServerContainer。然后,您将在启动方法中将 SSL 配置添加到 NetworkListener。然后,您可以将新的 GrizzlySSLServerContainer 类的完整限定名称添加到 META-INF/services/org.glassfish.tyrus.spi.ServerContainerFactory 和您的 JAR 中,Tyrus 应该会选择它。

这有点 hacky,不得不复制/粘贴代码很糟糕,但它应该可以工作。

1.) 将 GrizzlyServerContainer 复制到新的 GrizzlySSLServerContainer 类。

2.) 添加方法以将 SSL 配置数据提供到您的新 Container 类中。

3.) 向NetworkListener添加数据以实例化SSL

4.) 将新类添加到 jar 的 META-INF/serivces 目录中。

关于java - 在 grizzly 上设置 websocket SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25893850/

相关文章:

java - 如果不在方括号或圆括号内,则用逗号分隔字符串

java - 是否可以在编译时以外的运行时进行验证检查?

ssl - 无法设置远程应答 sdp : Failed to push down transport description: Failed to set SSL role for the channel

postgresql - Npgsql Visual Studio 客户端 SSL 证书

java - 如何更改特定内容类型的 HTTP header ?

javascript - 使用 rxjs 创建一个将在稍后连接到 Web 套接字的可观察对象

node.js - Nodejs 和网络套接字

java - 在单个 webview Android 中从一个页面导航到另一个页面

swift - 为 Swift 安排套接字通信

java - 我怎样才能首先显示它?