комбинируя весеннюю безопасность 3 с api трикотажа отдыха - PullRequest
8 голосов
/ 03 ноября 2011

У меня есть сценарий, в котором я пытаюсь объединить весеннюю защиту с майкой для моего REST API.

Моя потребность довольно сложна (я думаю) и выглядит следующим образом:

Spring security используется для перехвата URL-адресов и принудительной базовой аутентификации для доступа к ресурсу REST. Кажется, это нормально, так как я использую http-клиент для проверки этого.

Однако я хочу как-то получить доступ к объекту User, который загружен, чтобы проверить некоторые дополнительные разрешения, которые зависают от пользователя (объект карты с логическими флагами, чтобы указать, являются ли свойства объекта видимыми или нет). Код, который выполняет загрузку, работает, но после Spring аутентифицируется, как мне получить доступ к объекту User в самом фактическом методе REST Resource? Это возможно?

Итак, шаги:

1) Клиент выполняет вызов REST API 2) Spring перехватывает URL-адреса, проверяет имя пользователя и пароль, указанные в заголовке http 3) Доступ к методу остального ресурса осуществляется при наличии действительных учетных данных

Но перед шагом 3 я хочу каким-то образом передать загруженный объект User самому фактическому методу Resource, чтобы я мог дополнительно применить некоторую логику, чтобы ограничить то, что пользователь может видеть, основываясь на разрешениях, которые я загрузил ??? Это возможно? Я думаю, что где-то видел код, который проверяет роли пользователей до того, как к методу обращаются с использованием Spring и REST, но если у кого-то есть какие-либо ссылки или идеи, которые будут превосходны.

Пожалуйста, помогите, если можете. Большое спасибо.

1 Ответ

5 голосов
/ 18 ноября 2011

Я решил это, используя прокси в области запроса, созданный фабрикой бинов.

Это позволяет вам просто внедрить вашего текущего аутентифицированного пользователя в любой управляемый bean-компонент, и в моем случае мои ресурсы Джерси попали в эту категорию. Я ввел своего пользователя в уровень ниже ресурсов, но все равно.

Кто-то еще элегантно опубликовал полное решение здесь.

...