Открытый проект BootJava.

Программа. Материалы проекта

GitHub (см. 1.3 настройки проекта)

Обновление и рефакторинг. XSS. Удаление Spring Data Rest

7.1 Обновление и рефакторинг

  • pom.xml - обновил версии. Для тестов выставил UTF-8 кодировку и для запуска их из IDEA добавил зависимость junit-platform-launcher
  • AppConfig - в тестах не поднимаем H2 TCP Server
  • OpenApiConfig - добавил креденшелы тестирования
  • AccountController, WebSecurityConfig, AccountControllerTest - регистрацию нового пользователя вместо GET /register делаю через POST
  • WebSecurityConfig - решил проблему с циклической зависимостью (ОБНОВЛЕНО), ObjectMapper добавляю через @Autowired
  • AppException - поправил вывод сообщений об ошибке
  • BaseEntity - в Swagger убрал id из примера тела объекта при создании/обновлении, см. asymmetric solution. При этом остается возможность его передавать в теле и мы его по прежнему проверяем в ValidationUtil
  • User, UserTo - переопределил toString покороче
  • переместил AuthUser, ValidationUtil, GlobalExceptionHandler
  • переименовал приложение и БД в bootjava
  • GlobalExceptionHandler - сделал красивые сообщения на большинство типичных ошибок
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 полей при сериализации в JSON
  • AccountController переименовал в ProfileController, добавился AdminUserController, AbstractUserController
  • Добавил проверку на дублирующий email как Spring валидацию: UniqueMailValidator, HasIdAndEmail
  • Добавил утильные классы JsonUtil, UserUtil, SecurityUtil
  • Добавил пакет user, класс NamedEntity и TO классы BaseTo, NamedTo, UserTo как основу для большого проекта
  • Общие вещи для всех репозиториев вынес в базовый BaseRepository
  • Добавил тесты на все методы контроллеров и валидацию. Общий код для тестирования контроллеров вынес в MatcherFactory
< 6-е занятие 8-е занятие>
Контакты: Григорий Кислин
E-mail: admin@javaops.ru
ОГРНИП: 317784700063201 | ИНН: 782581076920

Cайт-партнер: topjava.ru
Поделиться:
Москва Санкт-Петербург Киев Минск Харьков Новосибирск Львов Нижний Новгород Алматы Одесса Днепр Краснодар Екатеринбург Самара Ростов-на-Дону Днепропетровск Казань Воронеж Челябинск Пермь Гомель Владивосток Астана Томск Саратов Гродно Уфа Калининград Николаев Запорожье Ярославль Омск Кемерово Белгород Брест Ташкент Херсон Ижевск Чебоксары Караганда Волгоград Балашиха Йошкар-Ола Киров Барнаул Калуга Иркутск Магнитогорск Донецк Монреаль Warszawa Los Angeles Винница Сыктывкар Тюмень Рига Кишинев Бишкек Владимир Красноярск Ульяновск Жуковский Тольятти Тверь Вологда Улан-удэ Сочи Иваново Мариуполь Пенза Краков Сумы Подольск Тула Рязань Хабаровск Helsinki Могилев Haifa Полтава Сургут Новокузнецк Березники San Francisco Иннополис Tel Aviv Ереван Тернополь Ставрополь Кривой рог Северодвинск Витебск Астрахань

AltStyle によって変換されたページ (->オリジナル) /