2015-05-06 4 views
0

Я использую Cometd 3.0.1 с причалом 9.2.3, используя реализацию websocket на основе JSR 356 (а не собственную реализацию websocket для приставок).Как использовать мой фильтр проверки подлинности с помощью Websocket для Cometd, развернутого в Jetty?

Я добавил несколько фильтров auth, которые в основном запрашивают заголовки аутентификации по запросу. Но поскольку обновление websocket происходит как часть фильтра websocketupgrade, существует ли способ сделать работу аутентификации здесь?

ответ

0

Аутентификация через фильтр - неправильный способ выполнить аутентификацию.

Правильное решение:

сервлета спецификации ожидает вас в установке и настройке слоев аутентификации и авторизации вашего приложения с использованием методов сервлет как контейнера и метаданных приложения (WEB-INF/web.xml)

Это означает, что вы устанавливаете защиту на стороне контейнера, используя либо контейнер Jetty, определенный LoginService, либо используя конфигурацию спецификации JAAS. Затем вы ссылаетесь на свои области безопасности в своем WEB-INF/web.xml и используете их. Если у вас есть что-то обычай, вы можете подключиться к LoginService по вашему выбору (даже по заказу) и управлять им соответствующим образом.

Перед всеми фильтрами и сервлетами применяются аутентификация и авторизация JAAS и LoginService.

В этом случае, вы будете иметь доступ к информации об аутентификации в процессе обновления, в частности, во время ServerEndpointConfig.Configurator.modifyHandshake()

Гадкий Hack Решение:

Добавьте org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter к вашему WEB-INF/web.xml вручную.

Это не дает вам возможности попытаться установить фильтр подлинности до этого WebSocketUpgradeFilter в 100% случаев использования.

Внимание: Фильтр упорядоченность исполнение не часть сервлета спецификации. Будьте осторожны с этим, так как может показаться, что он работает на вашей машине dev, а затем внезапно не работает в QA или производстве. Просто потому, что набор фильтров в метаданных будет иметь в нем другой порядок.

Примечания:

  • Путь Spec должен быть /*
  • Асинхронный Поддерживаемые должны быть true
  • диспетчерские Типы должны быть REQUEST только.
  • Не устанавливайтеcontextAttributeKey для этого фильтра
  • Всего остального WebSocketUpgradeFilter Инициализационного-PARAMS является недопустимым для JSR-356 использования (они перекрываются различными JSR-356 конфигураций конечных точек)
+0

Есть ли пример этого правильного решения с помощью пользовательской службы входа где-нибудь? – Sonny