У меня есть приложение 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)?