Spring Security — защита методов (method security)

С помощью Spring Security можно устанавливать защиту не только на вход в приложение, но и на любой выполняемый метод. Как настроить защиту методов в приложении читайте ниже.

Используемые технологии
  • Spring 4.2.2.RELEASE
  • Spring Security 4.0.2.RELEASE
  • MySQL 5.6.25
  • JSP 1.2.1
  • IntelliJ IDEA 14
  • Maven 3.2.5

1. Описание задачи

Включить защиту методов в Spring Security 4.0.2. Показать использование аннотаций @Secured, @PreAuthorize для защиты методов.

2. Структура проекта

Т.к. здесь будет описаны только несколько файлов, то для понимания что делают другие файлы проекта рекомендую к прочтению Spring Security – username password remember me (сохранение пароля пользователя для автоматической аутентификации).

SS MethodSecure structure

Относительно предыдущей части добавлен интерфейс MainInterface и его реализация.

3. Настройка dispatcher-servlet.xml

В настройках изменению подвергся только этот xml.

Обращаю внимание, что эта настройка добавлена в dispatcher-servlet.xml, а не в spring-security-config.xml.

Полный листинг dispatcher-servlet.xml:

4. Интерфейс MainInterface и реализация

Защиту методов рекомендуется включать на уровне интерфейса.

Выполнить метод showMessage сможет пользователь с ролью ROLE_ADMIN. Метод preAuthorizeMessageExample сможет выполнить только тот пользователь, имя которого совпадет с ‘admin’. Заметьте как можно использовать Expression Language в Spring Security.

Обычный вывод в консоль сообщения, чтобы было понятно отработал ли метод. Результат первого метода добавляется в модель Spring MVC и используется на странице secondPage.jsp.

5. Контроллер MainController

При попытке перейти на страницу secondPage.jsp (клик по ссылке /second, подробности в статье, указанной в начале), на которую имеется доступ для пользователей с правами ROLE_USER и ROLE_ADMIN будет предпринята попытка вызвать два метода из интерфейса.

Если у пользователя нет соответствующих прав, то произойдет переадресация на страницу accessDenied.

Попробуйте войти под пользователем user (без роли ROLE_ADMIN). У user будет доступ к странице /second, но при попытке вызвать метод доступ будет перекрыт, т.к. метод доступен только для ROLE_ADMIN.

Для пользователя admin сообщение из метода showMeMessage() успешно отображено на странице secondPage.jsp

SS MethodSecure test

Исходные коды

Spring Security MethodSecurity

Share Button
11
16205 Total Views 6 Views Today

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