2015-04-02 3 views
3

Я следил за this article и создал простейшее приложение echo для websocket. Хотя статья о Glassfish, я успешно запускаю свое приложение под Jetty 9, поскольку они используют стандартный javax.websocket API в статье. Он работает нормально, но теперь я хочу защитить соединение через Интернет. Я googled вокруг и нашел большинство примеров написаны как автономное приложение Java (с методом public static void main()). Они создают новый ConnectionFactory и запускают сервер с их кода (например, here).Jetty: как защитить соединение с websocket в web.xml?

Но я хочу запустить приложение под Jetty в качестве контейнера, поэтому я хочу просто указать некоторые параметры в файле web.xml или что-то еще, чтобы защитить мое соединение. Так что я нашел this статью и изменил мой web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Protected resource</web-resource-name> 
      <url-pattern>/*</url-pattern> 
      <http-method>GET</http-method> 
     </web-resource-collection> 

     <!-- https --> 
     <user-data-constraint> 
      <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
     </user-data-constraint> 
    </security-constraint> 
</web-app> 

Проблема заключается в том, что не работает. Наверное, потому что статья о Glassfish снова.

Как это не работает:

  • Мой IDE (IDEA) показывает красный цвет все теги внутри <security-constraint>, это означает, что проверка схемы не удалось, и эти теги не может содержаться внутри <security-constraint>
  • Когда я пытаюсь чтобы открыть index.html через HTTPS я получаю ошибку ssl_error_rx_record_too_long в браузере, а также есть две ошибки в выводе Jetty:

Illegal character 0x16 in state=START for buffer HeapByteBuffer

и

badMessage: 400 Illegal character 0x16 for HttpChannelOverHttp

Так .. Что я делаю неправильно? Как сделать защищенный websocket через Jetty или конфигурацию приложения?

+0

привет Энди, я вижу точно такие же ошибки в журналах. могли ли вы решить это? что вы изменили, чтобы заставить его работать? благодаря! – Hristo

+0

Привет, Христо. Вы читали статью из принятого ответа ниже? https://wiki.eclipse.org/Jetty/Howto/Configure_SSL – Andrew

+0

Да, я прочитал его, Энди :) единственный способ, которым я смог разрешить эти ошибки, - удалить модуль 'http' (комментируя его в 'start.ini'). что ты сделал? – Hristo

ответ

1

Тег ограничения безопасности, который вы описали, в основном используется для указания режима аутентификации BASIC на сервере приложений.

Я думаю, вы хотите включить HTTPS, а не аутентификацию. Для включения HTTPS вы можете следовать этой статье: https://wiki.eclipse.org/Jetty/Howto/Configure_SSL

+0

Спасибо, что указал на этот HOWTO. Он не на 100% завершен и не содержит деталей о конфигурации Jetty, но это хороший момент для начала. Исходя из этого, я наконец смог запустить Jetty в желаемой конфигурации. – Andrew

Смежные вопросы