32 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Руководство: Thymeleaf + Spring. Часть 1

Введение в Thymeleaf

В этой статье продолжим разбирать приложение из предыдущего примера. На этот раз сосредоточимся на синтаксисе шаблонов Thymeleaf. В пример будет добавлена проверка поля и вывод в шаблон ошибок.

Maven-зависимость

Чтобы добавить Thymeleaf в Spring Boot приложение, мы прописали в POM-файле зависимость:

Отображение атрибутов модели

На главной странице мы добавляли в модель два атрибута: animals и animal:

animals – коллекция, animal объект.

В шаблоне атрибуты становятся переменными, к которым есть доступ.

Вообще наша страница выглядит так:

Как выглядит страница на основе шаблона index.html

В шаблоне выводится коллекция animals. А перед ней находится форма, которая через заполненный animal отправляет введенное название животного в контроллер.

th:each – отображение коллекции

Начнем с коллекции animals. Мы ее выводим в виде таблицы:

$ – это обращение к переменной, содержащей коллекцию. Строка

Здесь an – текущее животное, iterStat – итератор.

Из него можно получить индекс:

а также, является ли индекс нечетным числом:

th:style – задание стиля

Если является, ты мы задаем строке стиль:

Так все нечетные строки будут выделены жирным шрифтом.

th:text – отображение текста внутри тега

Как вывести имя животного? Для этого есть очень популярный атрибут th:text:

Он заполняет тег значением из переменной.

Если название животного – “козел”, то вышеприведенная запись преобразуется на итоговой странице в:

Перейдем к форме.

Обработка формы: th:action, th:object, th:field

Форма у нас обрабатывается благодаря трем атрибутам:

где первый атрибут th:action задает адрес /, по которому идет POST-запрос с формы, второй – объект Animal, а третий – его поле name, которое заполняется и передается в контроллер. Обратите внимание, что переменная $ задана в th:object, поэтому имя поля прописывается со звездочки.

Форма преобразуется в итоге:

th:value

Но можно обойтись без th:object, в этом случае тегу прописываем атрибут th:value:

Разницы нет, в обоих случаях в теле POST-запроса уходит name=значение, а итоговый :

Проверка поля и вывод ошибок – th:errors

Добавим в код проверку корректности введенного значения имени и вывод ошибок. Для этого придется поменять код в нескольких местах.

Модель – @NotBlank и @Size(min=2, max=50)

Во-первых, добавим для поля name модели условие, при котором оно считается корректным:

То есть поле name должно быть не пустым (не состоять из пробелов) и иметь размер от 2 до 50.

Чтобы аннотации @NotBlank и@Size(min=2, max=50) компилировались и обрабатывались, необходимо добавить Maven-зависимость:

@Valid и BindingResult в контроллере

Во-вторых, исправим контроллер.

Значение name должно проверяться, когда Animal приходит в контроллер в метод add().

Чтобы это происходило, аннотируем animal с помощью @Valid, а следующим аргументом добавим BindingResult (порядок важен):

Теперь перенаправление (“redirect:/”) на get() делаем только в случае успеха, иначе же просто возвращаем index.html с ошибками. Модель тоже надо заполнять, чтобы не терять список уже добавленных животных.

th:errors – вывод ошибок

После всех приготовлений вывести ошибки просто. Просто добавим под тег:

В итоге при попытке добавить пустую строку получим:

Вывод ошибок

Итоги

Код примера доступен на GitHub. В нем добавлена проверка поля и вывод ошибок, касающихся этого поля.

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

Сегодня дополним наш предыдущий урок 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 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

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

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

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

4. Spring Boot

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

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

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

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 файлы и добавляем ссылки на страницы для более удобной навигации.

Spring Boot Web Thymeleaf + Spring Security

1. Посетите страницу Admin ( Защищено с помошью Spring Security , нужны права Администратора ( Admin Role ) )

2. Посетите страницу User ( Защищено с помошью Spring Security , нужны права пользователя ( User Role ) )

3. Посетите Открытую страницу ( доступна всем )

Admin page ( Spring Security protected )

User page ( Spring Security protected )

Normal page ( No need login )

Please Sign In

403 – Access is denied

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

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 позаботился о нас

thymeleaf Начало работы с тимелеафом

замечания

Thymeleaf – это механизм шаблонов, библиотека, написанная в JAVA. Он позволяет разработчику определять шаблон страницы HTML, XHTML или HTML5, а затем заполнять его данными для создания конечной страницы. Поэтому реализует Model-View часть Model-View-Controller шаблон.

Важным принципом дизайна Тимелеафа является то, что сам шаблон должен быть правильно написан (X) HTML.

Версии

Представление формы Ajax с JQuery

Чтобы отправить форму через Ajax с помощью JQuery:

конфигурация

Чтобы начать работу с Thymeleaf, посетите официальную страницу загрузки .

Зависимость от Maven

Грейд-зависимость

Пример конфигурации

Начиная с версии 3.0, Thymeleaf поддерживает только конфигурацию Java.

В viewResolver() вы можете настроить, например, кодировку и тип содержимого для представлений. Дополнительная информация

В templateEngine() вы можете добавить специальные диалекты. Например, чтобы добавить engine.addDialect(new SpringSecurityDialect()); Spring Security, вы можете сделать это, как этот engine.addDialect(new SpringSecurityDialect());

Посмотрите на установщик для префикса и суффикса в методе templateResolver() . Он сообщает Тимелеафу, что каждый раз, когда контроллер вернет представление, Thymeleaf будет искать эти имена в html в каталоге webapp/views/ и добавлять к вам суффикс .html .

пример

Thymeleaf будет искать html с именем my-index.html в каталоге webapp/views/foo/ . В соответствии с приведенной выше конфигурацией.

Представление формы

Объект формы

контроллер

friendsForm.html

result.html

Замена фрагментов на ajax

Если вы хотите заменить части своего сайта, ajax – это простой способ сделать это.

На веб-сайте.html, где вы хотите заменить контент на основе выбранного значения:

И content.html с фрагментами, которые вы хотите включить, на основе выбранного значения:

И последнее, но не менее важное: Spring MVC ContentController.java :

Использование флажков

Пример метода в контроллере

Не используйте th:name для checboxes, просто name

голоса
Рейтинг статьи
Читать еще:  Какой язык программирования выбрать для работы с данными?
Ссылка на основную публикацию
Статьи c упоминанием слов: