Обновление и рефакторинг. XSS. Удаление Spring Data Rest
7.1 Обновление и рефакторинг
pom.xml- обновил версии. Для тестов выставил UTF-8 кодировку и для запуска их из IDEA добавил зависимостьjunit-platform-launcherAppConfig- в тестах не поднимаем H2 TCP ServerOpenApiConfig- добавил креденшелы тестированияAccountController, WebSecurityConfig, AccountControllerTest- регистрацию нового пользователя вместо GET /register делаю через POSTWebSecurityConfig- решил проблему с циклической зависимостью (ОБНОВЛЕНО),ObjectMapperдобавляю через@AutowiredAppException- поправил вывод сообщений об ошибкеBaseEntity- в Swagger убралidиз примера тела объекта при создании/обновлении, см. asymmetric solution. При этом остается возможность его передавать в теле и мы его по прежнему проверяем вValidationUtilUser, UserTo- переопределилtoStringпокороче- переместил
AuthUser, ValidationUtil, GlobalExceptionHandler - переименовал приложение и БД в bootjava
GlobalExceptionHandler- сделал красивые сообщения на большинство типичных ошибок
Apply patch 7_01_upgrade_refactoring (ОБНОВЛЕНО 27.04.22)
mvn clean test
7.2 Защита от XSS (Cross Site Scripting)
Сейчас мы никак не проверяем содержимое текстовых полей при создании/модификации объектов.
Это грозит безопасности приложения, которое будет использовать данные, например, для вывода
в браузере пользователя:
Раньше я реализовывал XSS защиту через
При этом поля
@SafeHtml, пока его не удалили из
hibernate validator.
Пришлось сделать собственную аннотацию @NoHtml на основе Sanitizing
User Input
и jsoup - Sanitize
HTML.При этом поля
password проверять не надо, т.к. он не выводится в html, а email надо.
Apply patch 7_02_xss_validation
7.3 Удаление Spring Data Rest (опционально)
Можно делать приложение с использованием Spring Data Rest/HATEOAS: контроллеры генерируются автоматически по репозиториям, требуется настройка ресурсов в кастомных контроллерах. Или можно использовать чистый REST, многие вещи при этом упрощаются. Сделаем миграцию на простой REST и уберем Spring Data Rest из проекта.
Большинство кода добавилось из проекта стажировки TopJava:
pom.xml- удалил все, что относится к spring-data-rest.
Добавил jackson-datatype-hibernate5 для обнуления LAZY полей при сериализации в JSONAccountControllerпереименовал вProfileController, добавилсяAdminUserController, AbstractUserController- Добавил проверку на дублирующий email как Spring валидацию:
UniqueMailValidator, HasIdAndEmail - Добавил утильные классы
JsonUtil, UserUtil, SecurityUtil - Добавил пакет
user, классNamedEntityи TO классыBaseTo, NamedTo, UserToкак основу для большого проекта - Общие вещи для всех репозиториев вынес в базовый
BaseRepository - Добавил тесты на все методы контроллеров и валидацию. Общий код для тестирования контроллеров вынес в
MatcherFactory