Главная » Spring » Безопасность веб-запросов Spring

0

Все взаимодействия с веб-приложениями на языке Java начина- ются в компоненте HttpServletRequest. И коль скоро средством досту- па к веб-приложению является запрос, то с него и следует начинать обеспечивать безопасность.

Обычно настройка безопасности на уровне запросов начинается с объявления одного или более шаблонов URL-адресов, требующих некоторых привилегий, и ограничения доступа к содержимому по этим адресам для пользователей, не обладающих необходимыми привилегиями. Более того, доступ к некоторым URL можно также ограничить протоколом HTTPS.

Прежде чем ограничивать доступ пользователям, не обладающим необходимыми привилегиями, необходимо предусмотреть возмож-

ность определять, кто пользуется приложением. Поэтому приложе- ние должно аутентифицировать пользователя, предложив ему иден- тифицировать себя.

Фреймворк Spring Security поддерживает эти и многие другие способы обеспечения безопасности на уровне запросов. Но для на- чала следует настроить сервлет-фильтры, предоставляющие разно- образные возможности.

Сервлет-фильтры

Для обеспечения различных аспектов безопасности Spring Secu- rity использует несколько сервлет-фильтров. Кому-то может пока- заться, что это означает необходимость добавлять в конфигурацион- ный файл web.xml приложения несколько элементов <filter>. Но это не так – благодаря волшебству Spring достаточно настроить только один фильтр. В частности, достаточно добавить следующий элемент

<filter>:

<filter>

<filter-name>springSecurityFilterChain</filter-name>

<filter-class>

org.springframework.web.filter.DelegatingFilterProxy

</filter-class>

</filter>

DelegatingFilterProxy – это специальный сервлет-фильтр, не имею- щий самостоятельного значения, так как он просто делегирует филь- трацию реализации интерфейса javax.servlet.Filter, зарегистриро- ванной в контексте приложения Spring в виде компонента, как по- казано на рис. 10.1.

Рис. 10.1. Объекты-прокси DelegatingFilterProxy, обеспечивающие фильтрацию, делегируют фильтрацию компонентам в контексте приложения Spring

Чтобы задействовать фильтры из фреймворка Spring Security, в них необходимо внедрить какие-то другие компоненты. Однако в фильтры, зарегистрированные в файле web.xml, нельзя внедрить

компоненты. Но с помощью DelegatingFilterProxy можно настроить фактические фильтры в Spring, воспользовавшись преимуществом поддержки внедрения зависимостей.

Значение в элементе <filter-name>  играет важную роль. Это имя

будет использоваться для поиска компонента фильтра в контексте приложения Spring. Фреймворк Spring Security автоматически соз- даст компонент фильтра с идентификатором springSecurityFilterChain, потому что это имя указано в файле web.xml.

Что касается самого компонента springSecurityFilterChain, это еще один специальный фильтр, известный как FilterChainProxy. Это еди- ный фильтр, объединяющий в себе один или более других фильт- ров. Для обеспечения различных возможностей фреймворк Spring Security опирается на разные сервлет-фильтры. Но вам практически никогда не придется задумываться об этой особенности, потому что вам едва ли когда-нибудь потребуется явно объявлять компонент springSecurityFilterChain или любые другие фильтры, объединяемые в нем. Фреймворк Spring Security автоматически создает все необ- ходимые компоненты при настройке элемента <http>, о чем расска- зывается ниже.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии