2012-05-31 3 views
4

Я учусь весной безопасности, но я запутаться с его гибкость ..пружина безопасности, метод безопасный и безопасный URL

Я знаю, что могу обеспечить URLs путем определения правил в теге тогда я видел есть @secure аннотация, которая может защищать методы. , а затем есть другие аннотации для обеспечения чтения/обновления доменами (или POJO)

поэтому, когда я хочу создать типичное веб-приложение разрешения/роли/пользователей, помимо создания правил для защиты URL-адресов, мне также нужно использовать аннотацию @secure для защиты методов?

ej.

  1. пользователь вводит по Ограниченной URL-адрес
  2. приложение попросит войти в систему проверки
  3. приложений, если роль может получить доступ к URL
  4. пользователь выбрать «добавить новый» вариант
  5. пересчитайте, если пользователь имеет разрешение вызвать метод «addNew()» ??

или один из этапов 4 или 5 является избыточным.

sorry about my English

ответ

2

Главное здесь, чтобы запомнить. Вы должны предположить, что пользователь может отправить что-нибудь в ваше веб-приложение через необработанный HTTP GET или POST. Это также называется «никогда не доверять клиенту». Таким образом, шаги 4 и 5 выше не являются избыточными. Например, если вы достигли шага 5, вы не можете быть уверены, что был сделан шаг 3.

Тем не менее, если вы можете точно различать, что пользователь намеревается сделать это с помощью URL-адреса в одиночку и вам не нужно, чтобы обеспечить метод через канал доступа отличается (скажем, из очереди или RMI), вам может уйти с защитой только URL. Тем не менее, по-прежнему неплохая идея иметь безопасность на уровне метода независимо от этого ... по нескольким причинам. Во-первых, он документирует ожидаемые роли прямо там, где выполняется логика. Это может быть полезно для понимания предположений, которые были сделаны во время разработки, что может помочь в создании будущих улучшений. Во-вторых, он может гарантировать, что безопасность через будущий канал доступа не будет непреднамеренно нарушена.

+0

Благодарю вас за ответ.поэтому, если я защищаю каждый mothod/class, мне еще нужно защищать URL-адреса? или, может быть, комбинировать простое правило для шаблона anonymous/user/admin. – Kossel

+0

Если ваши URL-адреса сгруппированы примерно по ролям, вероятно, было бы проще защитить их по URL-адресу (например, URL-адрес «admin/**», требующий ROLE_ADMIN). Но часто вы либо не можете структурировать свое приложение таким образом, роли более сложны, чем те, или сами URL-адреса вообще не предоставляют много информации (т. Е. Большая часть информации находится в теле запроса). Но неплохо иметь некоторые уловки на уровне URL, особенно для ваших файлов, не связанных с Java (если у вас есть и обслуживают их в веб-приложении). –

3

Уровень защиты по уровню URL довольно богат, как можно видеть, например, глядя на свободное API of HttpSecurity. Но есть, по крайней мере, две причины для использования метода уровня безопасности в Спринг безопасности:

  1. как отметил Джонатан W, ваш обеспеченный логика может быть доступна через другие, чем HTTP типов разъемов. Например, логика может быть открыта через EJB.

  2. Для REST API один и тот же URI может поддерживать различные методы http, имеющие разные правила авторизации. Например, /myapi/order/{id} может принимать GET и DELETE, а DELETE может быть доступен только пользователям с ролью Supervisor. Вы не можете указать это правило с помощью защиты URL, но вы можете сделать это с помощью безопасности метода, например, с помощью метода @Secured("Supervisor") по методу, который обрабатывает DELETE.

Смежные вопросы