Обновление и рефакторинг. XSS. Удаление Spring Data Rest
7.1 Обновление и рефакторинг
pom.xml
- обновил версии. Для тестов выставил UTF-8 кодировку и для запуска их из IDEA добавил зависимостьjunit-platform-launcher
AppConfig
- в тестах не поднимаем H2 TCP ServerOpenApiConfig
- добавил креденшелы тестированияAccountController, WebSecurityConfig, AccountControllerTest
- регистрацию нового пользователя вместо GET /register делаю через POSTWebSecurityConfig
- решил проблему с циклической зависимостью (ОБНОВЛЕНО),ObjectMapper
добавляю через@Autowired
AppException
- поправил вывод сообщений об ошибкеBaseEntity
- в Swagger убралid
из примера тела объекта при создании/обновлении, см. asymmetric solution. При этом остается возможность его передавать в теле и мы его по прежнему проверяем вValidationUtil
User, 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