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
15440 Total Views 10 Views Today

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