Spring Security — пример приложения Hello World. Базовые настройки. Spring Security example

Spring Security example — быстрый старт в Spring Security 4. Обзор первоначальных настроек для запуска приложения Hello World с подключенным уровнем безопасности.

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

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

Необходимо подключить Spring Security 4.0.2 к Spring MVC приложению. Посмотреть как включается аутентификация пользователя, как настроить свою форму для ввода логина и пароля. Настроить форму выхода (logout).

Важно: Перейти на Spring 4 из Spring 3 без дополнительного кода не получится. Т.е. нельзя просто поменять зависимости в pom.xml и расслабиться. В официальной документации есть описание миграции на новую версию. Настройки этой статьи строго для 4+ версии Spring Security.

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

SS project Structure 1

Создан один MVC @Controller для обработки URL, несколько .jsp представлений с говорящими названиями. Так же в отдельной папке стандартные .xml настройки для Spring. MyBeanPostProcessor используется для отладки и предоставления расширенной информации о работе приложения совместно с log4j.xml.

*В пример намерено не добавляются никакие «красивости» вроде css стилей, bootstrap и т.п.. Так же избегается добавление любой лишней зависимости, чтобы не отвлекать читателя от главной темы статьи.

3. Создание проекта

Создаем пустой проект maven:

maven start

файл pom.xml:

Все зависимости подписаны. Это минимальный набор для запуска Spring MVC + Spring Security + JSP (всё крутится на Tomcat 8).

Добавляем две зависимости для фреймворков (правой кнопкой на название проекта Add frameworks support..)

SS add frameworks

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

Вторая половина конфигурации web.xml требует небольших пояснений. Для xml конфигурации Spring Security необходимо добавить фильтр springSecurityFilterChain (такое название обязательно) и его маппинг. Дальше дописаны страница при старте приложения и страница, которая будет отображаться на 403 коде (доступ запрещен).

5. Конфигурация Spring MVC dispatcher-servlet.xml

Все настройки стандартные и подписаны. Здесь ничего для Spring Security настраивать не нужно.

6. Конфигурация Spring Security spring-security-config.xml

  • use-expressions — поддержка выражений, при true нужно записывать вот так access = «hasRole(‘ROLE_USER’)»
  • intercept-url pattern — шаблон ссылки и у кого есть доступ к ней
  • form-login login-page — форма для ввода логина\пароля, которая будет показана для анонимного пользователя куда бы он не пытался войти внутри приложения.
  • csrf — Cross Site Request Forgery (описание в отдельном разделе документации). Тут необходимо обратить внимание на дальнейшее использование внутри jsp страницы элемента <c:out value = «${_csrf.token}»/>. Иначе работать приложение не будет.
  • remember-me, http-basic, headers — добавлены для примера. Использовать здесь их не обязательно. Подробнее в документации (кратко доступна по ctrl+q в IDEA)

Элемент authentication-manager и дочерние элементы — обязательны. Это всё. Больше для включения базовых настроек Spring Security делать ничего не нужно. Теперь перейдем к представлениям.

7. Описание представлений .jsp

redirectPage.jsp

Страница указана в welcome-file-list, т.е. попадаем в нее на старте приложения. Делает переадресацию по ссылке, которая обрабатывается в контроллере MainController. Это сделано для того, чтобы попасть внутрь приложения в скрытую от внешнего пользователя папку WEB-INF.

login.jsp

Это представление указано как login-page для Spring Security. Сюда будет перенаправлен любой неавторизованный пользователь.

welcomePage.jsp

Это первая страница, куда контроллер перенаправляет после старта приложения. Но т.к. мы еще не авторизованы, то мы попадем на login.jsp.

secondPage.jsp

Вторая страница, куда мы попадем после авторизации. Без прав сюда попасть нельзя.

Остальные страницы accessDenied, exitUser, adminPage представляют собой просто набор текстовой информации для отображения и здесь я их приводить не буду.

8. Контроллер Spring MVC

Обычный контроллер с тремя методами. При старте приложения сработает редирект с URL=’/welcome’ и он будет обработан в контроллере. Два других метода срабатывают по указанным ссылкам /second и /admin, висящими на кнопках в представлении seconPage.jsp.

9. Запуск приложения

Рассмотрим последовательность выполнения приложения.

  1. Срабатывает welcome-file-list из web.xml. Идем в redirectPage.jsp.
  2. Срабатывает редирект /welcome. Он обрабатывается в контроллере. Идем на страницу welcomePage.jsp, указанной в model контроллера.
  3. Попадаем на страницу login.jsp! Пользователь не авторизован и согласно настройкам в spring-security-config.xml нас на welcomePage не пускает.
  4. После успешной авторизации для пользователей с правами user, admin попадаем на welcomePage (или на accsessDenied для guest).
  5. На второй странице две ссылки. Одна из них сработает только для админа. Go! -> secondPage.jsp; AdminPage -> adminPage.jsp;
  6. Страница выхода перенаправит после удаления кукисов и т.п. на страницу входа. Ссылка /logout для кнопки разлогина обязательна!

SS login page

ss welcome page

ss second page

ss access denied

ss logoff

Вот так настраиваются базовые настройки Spring Security 4 для приложения Hello World;

P.S. папка web после добавления фреймворков переименована в webapp. Не забудьте исправить, если будете копировать код.

SS project Structure

 

Исходный код

Spring Security Hello World

Share Button
21
15201 Total Views 4 Views Today

2 thoughts on “Spring Security — пример приложения Hello World. Базовые настройки. Spring Security example

  1. Максим:

    <! page on load>
        <welcomefilelist>
            <welcomefile>redirectPage.jsp</welcomefile>
        </welcomefilelist>
    это не срабатывает даже в с твоими исходниками,многие важные моменты упущены, причем во всех статьях, представленные примеры не являются авторскими, прояви немного уважения к читателям и приведи материал в нормальное состояние.

    1. Добавьте «многие важные моменты во всех статьях» для других читателей в комментариях. Они будут вам благодарны.
      *P.S. код из исходников в конце статьи работает как задумано и redirect тоже:) Заметил только косяк в adminp (p тег не обернут правильно. Должно быть admin admin)

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