JEE6: Custom Realm vs ResourceFilter - какой из них лучше для аутентификации ресурса REST? - PullRequest
1 голос
/ 18 августа 2011

У меня есть приложение JEE6, расположенное на Glassfish 3.1.1, которое предоставляет услуги удаленным клиентам через ряд ресурсов REST.Некоторые ресурсы требуют аутентификации, другие - нет.

В настоящее время я защищаю защищенные ресурсы с помощью базовой HTTP-аутентификации, реализованной в виде пользовательской области / LoginModule.Если аутентификация не удалась, модуль входа в систему выдает LoginException, Glassfish сопоставляет это с HTTP 401. Если аутентификация успешна, ресурсы могут получить доступ к userPrincipal в securityContext.

Пока он работаетМеня раздражает, что я не могу перехватить LoginException.Мои клиенты ожидают XML или JSON;в теле HTTP 401 Glassfish дает им текст / HTML.Все другие исключения приложений, которые я могу перехватить с ExceptionMapper, только не с LoginException.

В данный момент я думаю о замене Custom Realm на ResourceFilter, где я буду выполнять базовую аутентификацию HTTPвручную.Я ожидаю, что если я брошу исключение здесь, оно будет перехвачено и правильно сопоставлено / маршалировано.

Мои вопросы:

  • Хорошая идея использовать ResourceFilter для аутентификации?Как насчет производительности?
  • Как мне сообщить ресурсу REST, кто только что прошел аутентификацию (кто такой userPrinicipal)?

1 Ответ

0 голосов
/ 17 октября 2012

Немного поздно, но все равно ...

Это контейнер, который выполняет аутентификацию, поэтому он никогда не достигнет вашего ресурса. Лично мне нравится подход управляемой контейнером аутентификации, потому что он хорошо отделяет аутентификацию от приложения.

Если вы хотите использовать ResourceFilter, вы можете получить доступ к SecurityContext из запроса. Это содержит Принципал. Оттуда вы можете заполнить, например, объект ApplicationConfig, который доступен во всем приложении.

Производительность зависит от реализации аутентификации. Я предполагаю, что накладные расходы при использовании ResourceFilter минимальны. При необходимости вы всегда можете использовать cookie-файл сеанса, чтобы сохранить сеанс для повторной аутентификации.

...