У меня есть приложение JEE6, находящееся на Glassfish 3.1.1, которое предоставляет услуги удаленным клиентам через несколько ресурсов REST. Некоторые ресурсы требуют аутентификации, другие - нет.JEE6: Custom Realm vs ResourceFilter - какой из них лучше для проверки подлинности ресурса REST?
В настоящее время я защищаю защищенные ресурсы с помощью HTTP Basic Authentication, реализованной как пользовательский realm/LoginModule. Если аутентификация не удалась, модуль входа в систему выдает карты LoginException
, Glassfish, которые соответствуют HTTP 401. Если аутентификация прошла успешно, ресурсы могут получить доступ к userPrincipal
в securityContext
.
Хотя он работает, меня раздражает, что я не могу перехватить LoginException
. Мои клиенты ожидают xml или json; в теле HTTP 401, Glassfish дает им текст/html. Все остальные исключения приложений я могу перехватить с помощью ExceptionMapper
, а не с помощью исключения LoginException.
В настоящее время я думаю о замене пользовательского царства ResourceFilter
, где я бы выполнил обычную проверку подлинности HTTP вручную. Я ожидал бы, что если я сделаю исключение здесь, он будет перехвачен и отображен/отображен должным образом.
Мои вопросы:
- Это хорошая идея использовать
ResourceFilter
для проверки подлинности? Как насчет производительности? - Как я могу сообщить ресурсу REST, кто только что прошел проверку подлинности (кто является пользователем?)?
Btw, я внедрил его как ResourceFilter и Injectable UserProvider. Если кому-то интересно, я рад опубликовать код. Не отвечает на мои вопросы, если это хорошая идея, хотя :) – Hank