Spring Web Flow — защита потоков (securing flows)

8. Spring Web Flow — защита потоков (securing flows)

8.1. Введение

Защита — важная часть любого приложения. Конечные пользователи не должны иметь возможность получить доступ к любой части сайта, путем простого угадывания URL. Важным областям сайта должен быть гарантирован доступ только авторизованных пользователей. Spring Security является проверенной платформой безопасности, которая может быть интегрирована в приложение на нескольких уровнях. Этот раздел посвящен безопасности выполнения потока.

8.2. Как можно защитить поток?

Защита выполнения потока выполняется в три этапа:

  • Настройка Spring Security с помощью правил аутентификации и авторизации
  • Аннотирование определение потока с помощью элемента безопасности для определения правил безопасности
  • Добавление SecurityFlowExecutionListener для выполнения правил безопасности.

Каждый из этих шагов должен быть завершен или правила безопасности не будут применяться.

8.3. Элемент безопасности

Элемент безопасности объявляет, что содержимое этого элемента должно пройти проверку авторизации прежде, чем будет предоставлен полный доступ. Это не может произойти более одного раза в стадии выполнения защищаемого потока.

Три фазы выполнения потока может быть защищено: потоки, состояния и переходы. В каждом случае синтаксис для элемента безопасности одинаковый. Элемент безопасности находится внутри элемента, который защищается. Например, чтобы защитить состояние необходимо указать элемент безопасности непосредственно внутри view-state:

8.3.1. Атрибуты безопасности

Атрибут attributes — разделенный запятыми список атрибутов авторизации Spring Security. Часто так же указываются роли безопасности. Атрибуты сравниваются с предоставленными атрибутами пользователя с помощью Spring Security менеджера принятия решений о доступе.

По умолчанию, для определения имеет ли пользователь разрешенный доступ, используется менеджер принятия решений о доступе на основе ролей. Если ваше приложение не использует роли авторизации, то это должно быть переопределено.

8.3.2. Сопоставление типов

Доступно два типа совпадений — any и all. Any — позволяет получить доступ, если хотя бы один из требуемых атрибутов безопасности был предоставлен пользователем. All — предоставляет доступ, только если каждый из требуемых атрибутов безопасности был предоставлен пользователем.

Эти атрибуты опциональны. По умолчанию используется значение any.

Атрибут match будет учитываться только при использовании менеджера принятия решения о доступе по умолчанию.

8.4. SecurityFlowExecutionListener

Выполнение потока не будет защищено только определением атрибутов правил защиты внутри потока. Так же необходимо определить SecurityFlowExecutionListener в конфигурации webflow и применить к его к flow executor.

Если доступ к части приложения был запрещен, то будет выброшено исключение AccessDeniedException. В дальнейшем это исключение будет поймано Spring Security и использовано для подсказки для аутентификации пользователя. Важно отметить, что исключение может быть проброшено на верх выполняемого стека, в противном случае конечному пользователю может быть не понятно как пройти аутентификацию.

8.4.1. Пользовательские настройки менеджера принятия решений о доступе

Если в вашем приложении используются настройки аутентификации не на основе ролей, то вам будет необходимо настроить собственный AccessDecisionManager. Вы можете переопределить менеджер принятия решений по умолчанию с помощью установки свойства accessDecisionManager в слушателе безопасности. Для большей информации обратитесь к Spring Security reference documentation.

8.5. Настройка Spring Security

Spring Security имеет мощные настройки конфигурации. Т.к. каждое приложение и окружение имеет собственные требования безопасности, то лучшим местом для изучения доступных возможностей будет документация Spring Security.

Оба примера приложений booking-faces и booking-mvc настроены с использованием Spring Security. Конфигурирование требуется как на уровне Spring, так и в web.xml

8.5.1. Настройка Spring

Настройка spring определяет особенности http (такие как защита URL и механику login/logout) и authentication-provider. Вот пример приложения, в котором настроен внутренний authentication-provider.

8.5.2. Конфигурация web.xml

В web.xml определен filter, который перехватывает все запросы. Этот фильтр слушает все login/logout запросы и обрабатывает их. Так же он может перехватывать AccesDeniedExceptions и перенаправлять пользователя на страницу login для входа.

 

Share Button
1
977 Total Views 1 Views Today

Добавить комментарий