GitHub проекта: https://github.com/cherepakhin/springboot-thymeleaf-security-demo
Демонстрация SpringBoot WEB приложения с авторизацией Spring Security.
Использованы следующие технологии:
- Spring Boot
- Spring MVC
- Thymeleaf
- Spring Security
- Spring Data JPA
- MySQL
Запуск
Java 11
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 ./mvnw spring-boot:run
Открыть в браузере: http://localhost:8080/
Вход в программу по email
- User:
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. Password: admin - User:
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. Password: user
Открыть домашнюю страницу пользователя: http://127.0.0.1:8080/home
Она будет разная для разных пользователей.
Экраны
Для незарегистрированных пользователей:
Для Admin
- Доступен пункт меню "To Admin"
- Содержимое страницы "To Admin": "You will see this only if you are ADMIN":
Экран для User
Нет доступа к Admin page для User:
Определение роли пользователя в шаблоне main/src/main/resources/templates/userhome.html:
<div sec:authorize="hasRole('ROLE_ADMIN')">
<h3>You will see this only if you are <b>ADMIN</b></h3>
<p>
<a th:href="@{/admin/home}">Admin Home</a>
</p>
</div>
WebSecurityConfig.java defines the rules for accessing pages.
Mobile screens

Link action form to java code
Form (html):
link: th:object="${content}" th:action="@{/new_message}" method="post"
New Message
<div class="container" style="padding-left: 0px; margin-left: 0px;">
<form class="form-horizontal" th:object="${content}" th:action="@{/new_message}"
name="new_form"
id="edit_form"
method="post" role="form"> // <--- POST!!! /new_message
<div class="form-group" style="margin-left: 0px;">
<label for="message_content">Сообщение (max 100 символов):</label>
<input class="form-control" id="content" maxlength="100" type="text" th:name="content"/>
</div>
<button type="submit" class="btn btn-primary" value="Save">Сохранить</button>
<a class="btn btn-default" th:href="@{/home}">Отмена</a>
</form>
%lt;/div>
Handler in Java code (@PostMapping("/new_message")):
- Method POST: @PostMapping(value = "/new_message")
- Value: th:object="${content}"
Обработка в Java-коде контроллера:
@Controller
public class HomeController {
@PostMapping(value = "/new_message")
public String newMessage(@RequestParam(defaultValue = "----", value = "content") String newContent) {
...
}
}
Покрытие тестами (test coverage)
./mvnw clean test ./mvnw jacoco:report
Открыть target/site/jacoco/index.html](target/site/jacoco/index.html
Links
- https://github.com/dkubrakov/spring-boot-thymeleaf-security
- https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
- https://www.javaguides.net/2018/09/spring-boot-spring-mvc-role-based-spring-security-jpa-thymeleaf-mysql-tutorial.html
Разное
Подключение к MySQL из shell:
mysql -u vasi -h v -p
database: thymeleaf_security_demo
TODO
- tests
- paging messages