2014-09-17 6 views
0

Я пытаюсь настроить WebSocket через SSL с помощью «javax.websocket.server.ServerEndpoint» в контейнере гризли. Однако я не могу найти способ установить свойство SSL для моей конечной точки.Настройка websocket SSL на grizzly

Мой конечной код:

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> 

Благодаря

+0

Вы уверены, что используете Jetty? Это больше похоже на встроенную контейнерную поддержку гризли, которая поставляется с Tyrus. –

+0

У вас есть право, у Jetty нет отчета по этой проблеме. Это эффективно контейнер гризли. Я отредактировал сообщение – Manticore

ответ

2

Глядя на исходный код Тир, похоже, что это не поддерживается из коробки. Вам нужно будет создать новый ServerContainerFactory, как и файл org.glassfish.tyrus.container.grizzly.server.GrizzlyServerContainer. Иди, хватай код из Гитуба. Вы можете создать собственный GrizzlySSLServerContainer. И затем вы добавите конфигурацию SSL в NetworkListener в методе запуска. Затем вы можете добавить полное квалифицированное имя вашего нового класса GrizzlySSLServerContainer в META-INF/services/org.glassfish.tyrus.spi.ServerContainerFactory с вашим JAR, и Tyrus должен его забрать.

Это немного взломано, и это отстой, чтобы скопировать/вставить код, но он должен работать.

1.) Скопируйте GrizzlyServerContainer в новый класс GrizzlySSLServerContainer.

2.) Добавить метод предоставления данных конфигурации SSL в новый класс контейнеров.

3.) Добавление данных NetworkListener инстанцировать SSL

4.) Добавить новый класс в каталог META-INF/serivces вашей баночке.

+0

Поскольку я подозреваю, что нет встроенной поддержки websocket ssl :(У меня есть технология изменений для моего проекта, поэтому я не буду тестировать ваше решение, но это должно сработать. Спасибо – Manticore

+0

Кто-нибудь уже сделал это успешно? POC, который использует Tyrus и Grizzly автономно, и нужно, чтобы он был SSL. Обнаружили здесь в 11-й час, без поддержки SSL («wss») в контейнере Grizzly! Что это было? – Darrin

+0

Кто-нибудь это сделал? – Jamsheer