объединение spring security 3 с jersey rest api

#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. Обратите внимание на отличный ответ, это то, что я сделал.