Пример Spring Boot + Spring Security + Thymeleaf

spring boot sequrity

Сегодня дополним наш предыдущий урок Spring Boot и Thymeleaf JAR добавив Spring Sequrity.

Итак, собираем SPRING BOOT + SPRING SECURITY приложение в связке с встроенным сервером приложений Tomcat  и движком шаблонов Thymeleaf  в качестве исполняемого JAR-файла.

содержание

Технологии:
  1. Spring Boot 1.5.9.RELEASE
  2. Spring 4.3.13.RELEASE
  3. Spring Security 4.2.2
  4. Thymeleaf 2.1.5.RELEASE
  5. Thymeleaf extras Spring Security4 2.1.3
  6. Tomcat Embed 8.5.14
  7. Maven 3
  8. Java 8

1. Структура каталогов

2. Зависимости

Объявляем зависимость spring-boot-starter-security, она даст нам все необходимые инструменты для Spring Boot + Spring Security приложения.

Я как обычно использую Spring Initializr

spring boot security
spring boot security init

3. Spring Security

3.1 Наследуемся от WebSecurityConfigurerAdapter, и переопределяем правила безопасности в void configure(HttpSecurity http)

Подобные конфиги я обычно кладу в пакет config, в Spring MVC их было штуки 4

Для пользователя «admin»:

Разрешен доступ к странице /admin 
Запрещен доступ к странице /user , будет перенаправлять на 403 access denied

Для пользователя «user»:

Разрешен доступ к странице /user

Запрещен доступ к странице /admin, будет перенаправлять на 403 access denied

[stextbox id=’warning’ caption=’configure(HttpSecurity)’ collapsing=»true»]

Метод configure(HttpSecurity) определяет, какие URL пути должны быть защищены, а какие нет. В частности, «/» и «/home» настроены без требования к авторизации. Ко всем остальным путям должна быть произведена аутентификация.

Когда пользователь успешно войдет в систему, он будет перенаправлен на предыдущую запрашиваемую страницу, требующую авторизацию.

[/stextbox]

[stextbox id=’warning’ caption=’configure(AuthenticationManagerBuilder)’ collapsing=»true»]метод configure(AuthenticationManagerBuilder), то он создает в памяти хранилище пользователей, в нашем случае их 2 user и admin[/stextbox]

3.2 Наш кастомный 403 Access denied обработчик, логирует запрос и перенаправляет на /403

4. Spring Boot

4.1 Добавим контроллер, определим в нем имена вьюх и http запросы

[stextbox id=’info’ caption=’Почему @GetMapping?’ collapsing=»true» collapsed=»true» shadow=»false»]

В контроллере мы используем @GetMapping, по сути он эквивалентен @RequestMapping(method = RequestMethod.GET) но более лаконичен.

Так же бывают такие варианты:

@GetMapping,

@PostMapping,

@PutMapping,

@DeleteMapping,

@PatchMapping

[/stextbox]

4.2 Наша точка входа — сам Spring Boot application, если вы создавали проект в ручную

5. Thymeleaf + Resources + статические файлы

5.1 Для Thymeleaf файлов, создаем каталог в src/main/resources/templates/

5.2 Thymeleaf фрагменты, для шаблонов – header

5.3 Thymeleaf фрагменты, для макета шаблона – footer. Обратите внимание на тег sec, он очень полезен для отображения информации Spring Security в шаблонах, подробнее Thymeleaf extra Spring Security

5.4 Перечисляем Thymeleaf файлы и добавляем ссылки на страницы для более удобной навигации.

 

4.2 Статические файлы, такие как стили CSS или Javascript кладем в /src/main/resources/static/

[stextbox id=’black’]Прочтите эту статью о Spring Boot Serving static content для общего понимания работы с ресурсами в Spring[/stextbox]

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

6.1 Запускаем приложение. Путь /admin/** защищен ,нам нужно войти в систему как админ что бы получить к нему доступ

6.2 Смотрим результат http://localhost:8080

6.3 Попытка доступа к http://localhost:8080/admin, автоматически отправляет нас на страницу авторизации http://localhost:8080/login

6.4 Не верный логин или пароль так же обрабатывается без нашего участия http://localhost:8080/login

6.5 При правильной авторизации нас автоматически направляет на страницу Админа http://localhost:8080/admin, к тому же мы избавились от дубликатов в написании header и footer благодаря фрагментам thymeleaf

6.6 А доступ к http://localhost:8080/user, по прежнему редиректит нас на 403 страницу http://localhost:8080/403 как мы и описывали в конфигурации Spring Security

6.7 Кликнув в низу страницы на ссылку sign out(выход), нас перенаправляет на http://localhost:8080/login?logout

Как видим и здесь Spring Security позаботился о нас 😉

Ссылки

  1. http://www.mkyong.com/
  2. Securing a Web Application
  3. Spring Security Reference
  4. Spring Boot Security features
  5. Spring Boot Hello World Example – Thymeleaf
  6. Spring Security Hello World Annotation Example
  7. Thymeleaf – Spring Security integration basics
  8. Thymeleaf extra – Spring Security integration basics
  9. Thymeleaf – Standard URL Syntax
  10. Spring Boot + Spring MVC + Spring Security + MySQL
  11. Spring Boot – Static content
  12. Spring MVC – Inlucde CSS file
Подписаться
Уведомлять о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

2 комментариев
старым
новым колличеству голосов
Межтекстовые Отзывы
Посмотреть все комментарии
Илья
Илья
15.05.2018 14:59

Не могли бы Вы дать ссылку на готовый проект?

2
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x