Аутентификация через фильтр - неправильный способ выполнить аутентификацию.
Правильное решение:
сервлета спецификации ожидает вас в установке и настройке слоев аутентификации и авторизации вашего приложения с использованием методов сервлет как контейнера и метаданных приложения (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 конфигураций конечных точек)
Есть ли пример этого правильного решения с помощью пользовательской службы входа где-нибудь? – Sonny