#rest #spring-security #jersey
#rest #spring-безопасность #джерси
Вопрос:
У меня есть сценарий, в котором я пытаюсь объединить spring security с jersey для моего REST API.
Моя потребность довольно сложная (я думаю), и она заключается в следующем:
Spring security используется для перехвата URL-адресов и принудительной базовой аутентификации для доступа к ресурсу REST. Кажется, все в порядке, поскольку я использую http-клиент для тестирования этого.
Однако то, что я хочу сделать, это каким-то образом получить доступ к загруженному объекту User, чтобы проверить некоторые дополнительные разрешения, которые зависают от пользователя (объект map с логическими флагами, указывающими, видны ли свойства объекта или нет).). Код, который выполняет загрузку, работает, но после аутентификации spring как мне получить доступ к объекту User в самом методе REST Resource?? Возможно ли это?
Итак, шаги:
1) Клиент выполняет вызов REST API 2) Spring перехватывает URL-адрес, проверяет имя пользователя и пароль, указанные в заголовке http 3) Затем осуществляется доступ к методу rest resource, если присутствуют действительные учетные данные
Но перед шагом 3 я хочу каким-то образом передать загруженный пользовательский объект самому фактическому методу ресурсов, чтобы я мог дополнительно применить некоторую логику для ограничения того, что пользователь может видеть, на основе загруженных мной разрешений??? Возможно ли это? Я думаю, что я где-то видел какой-то код, который проверяет роли пользователей перед доступом к методу с использованием Spring и REST, но если у кого-нибудь есть какие-либо ссылки или идеи, это было бы отлично.
Пожалуйста, помогите, если можете. большое вам спасибо.
Ответ №1:
Я решил это, используя прокси-сервер с областью запроса, который был создан с помощью bean factory.
Это позволяет вам просто вводить вашего текущего аутентифицированного пользователя в любой управляемый компонент spring, и в моем случае мои ресурсы Jersey попали в эту категорию. Я ввел своего пользователя на уровень ниже ресурсов, но все равно.
Комментарии:
1. спасибо @Derek troy-West. Обратите внимание на отличный ответ, это то, что я сделал.