Skip to content
Vladimir edited this page Feb 9, 2019 · 1 revision

Онлайн проекта Topjava

Обновил Демо приложение нашей версией

Некоторые темы урока новые, поэтому видео есть не везде.

Все материалы проекта (в том числе и будущие выпуски) останутся доступны в Google Drive

error Правка

Apply 11_0_fix.patch

  • переименовал контроллеры Ajax -> Ui
  • new ResponseEntity переделал в билдеры
  • другие мелкие правки

hw Разбор домашнего задания HW10

video 1. HW10

Apply 11_01_HW10_fix_encoding.patch

Apply 11_02_HW10_validation.patch

Apply 11_03_HW10_duplicate_email.patch

  • сделал код(ключ) i18n константой (EXCEPTION_DUPLICATE_EMAIL)

Apply 11_04_HW10_duplicate_datetime.patch

Первый самый простой и расширяемый (хотя зависить от базы), выбрал его. Для работы с HSQLDB сделал toLowerCase. Самый корректный и трудоемкий с собственными валидаторами: он позволяет валидировать в конроллерах, а не при сохранении.

Apply 11_05_HW10_change_locale.patch

  • Добавил локализацию календаря $.datetimepicker.setLocale(localeCode)
  • Вместо смену локали в lang.jsp через javascript сделал href=${requestScope['javax.servlet.forward.request_uri']}?lang=..
  • Добавил Collapsing The Navigation Bar

Заключительное 11-е занятие

Локализация:

Apply 11_06_i18n.patch

  • Добавил локализацию Search в datatable
  • Сделал локализацию ошибок валидации:
    • Все коды для локализации конкретной ошибки валидации можно посмотреть в дебаге: FieldError.getCodes()
    • Коды для ее аргументов: FieldError.getArguments() (аргумент складывается из имени класса и поля).
  • Добавил локализацию ErrorInfo.type (код локализации в ErrorType и поле ErrorInfo.typeMessage)
  • В выводе AJAX ошибки вывожу errorInfo.typeMessage
  • Увеличил ширину высплывающего noty

Защита от XSS (Cross Site Scripting)

Попробуйте до и после патча ввести в любое текстовое поле редактирования <script>alert('XSS')</script> и сохранить.

Apply 11_07_XSS.patch

  • password проверять не надо, т.к. он не выводится в html, а email надо
  • Сделал общий интерфейс валидации View.Web и @Validated(View.Web.class) вместо @Valid для проверки содержимого только на входе UI/REST. При сохранении проверка на безопасный html контент не делается.

Apply 11_08_404.patch

Доступ к AuthorizedUser

Apply 11_09_auth_user.patch

  • Автоподстановка в контроллерах
    • не стал делать автоподстановку по всем контроллерам (в абстрактных контроллерах проще работать с SecurityUtil, чем получать его через @AuthenticationPrincipal и передавать параметром)
  • В JSP: the authentication Tag
    • авторизованный пользователь доступен в JSP через tag authentication, интерсептор становится не нужным

Ограничение модификации пользователей

Apply 11_10_restrict_modification.patch

  • В AbstractUserController добавилась защита от удаления-модификации Admin/User для профиля HEROKUAbstractUserController заинжектил Environment и сделал проверку HEROKU)
  • Чтобы тесты были рабочими, ввел профиль HEROKU, работающий так же, как и POSTGRES.
  • Добавил ApplicationException для работы с ошибками с поддержкой i18n в приложении (от него отнаследовал NotFoundException и ModificationRestrictionException)

Для тестирования с профилем heroku добавьте в VM options: -Dspring.profiles.active="datajpa,heroku"

Apply 11_11_heroku.patch

Внимание:

  • проверьте, что в hr.bat запускается java 11 (java -version)
  • проверьте, что mvn у вас есть в path (или вставьте в hr.bat путь к maven)
  • Добавил зависимости postgres в профиль мавена heroku
  • Поменял настройки dataSource для профиля heroku. При опускании/поднятии приложения в heroku.com портятся коннекты в пуле и необходимо их валидировать.
  • При переходе на tomcat 9 в webapp-runner-9.0.14.0.jar\META-INF\services\javax.cache.spi.CachingProvider находится реализация провайдера Redis JCache, которая берется вместо нашего ehcache провайдера: ehcache-3.6.1.jar!\META-INF\services\javax.cache.spi.CachingProvider. В результате приложение падает по причине отсутствия Redis JCache. Проблему решил в плагине maven-dependency-plugin: вместо copy использую unpack и excludes. В результате запуск приложения тоже немного меняется: вместо запуска webapp-runner.jar запускаю распакованный класс webapp.runner.launch.Main.

Приложение деплоится в ROOT: http://localhost:8080

Apply 11_12_fix_search_i18n.patch

Починка локализации Search в datatables:

Apply 11_13_fix_webapp_runner.patch

Using without Memcached or Redis

Config Vars
  ERROR_PAGE_URL=...
  TOPJAVA_ROOT=/app

Datasources advanced
    ssl=true
    sslfactory=org.postgresql.ssl.NonValidatingFactory

hw Домашнее задание по проекту:

  • Задеплоить свое приложение в Heroku
  • Сделать / обновить резюме (отдать на ревью в канал #hw11 группы slack)
  • Заполнить в своем профиле Java Online Projects ссылку на резюме и информацию по поиску работы (если конечно актуально): резюме, флаги рассматриваю работу, готов к релокации и информация для HR.
  • Обновления базы соискателей буду рассылать по HR ночью на 27.12, постарайтесь успеть
  • Заполнить форму проверки выпускного проекта (возможно доплатить за ревью отдельно из JavaOPs профиля, как за тестовое собеседование: 1950р)
    • Для участников с проверкой выпускной проект принимаю на ревью до 09.01.2019
    • Участникам Masterjava срок до 31.03.2019.
  • Получить первое открытое занятие МНОГОПОТОЧНОСТЬ и пройти эту важную тему в проекте Masterjava
    • Обучение на Masterjava сейчас идет в индивидуальном режиме, старт в любое время.
    • Проект, патчи, группа Slack, занятия и видео анологичны проекту Topjava. До 23.12 цена минимальная!

Возможные доработки приложения:

  • Для редактирования паролей сделать отдельный интерфейс с запросом старого пароля и кнопку сброса пароля для администратора.
  • Добавление и удаление ролей для пользователей в админке.
  • Перевести UI на Angular / Vaadin elements /GWT /GXT /Vaadin / ZK/ [Ваш любимый фреймворк]..
  • Перевести проект на Spring Boot 2
  • Перевести шаблоны с JSP на Thymeleaf
  • Сделать авторизацию в приложение по OAuth 2.0 (Spring Security OAuth, VK auth, github oauth, ...)
  • Сделать подтверждение регистрации пользователя по email c возможностью восстановления пароля.
  • Сделать отображение еды постранично, с поиском и сортировкой на стороне сервера.
  • Перевод проекта на https
  • Сделать desktop/mobile приложение, работающее по REST с нашим приложением.
  • Показ ошибок в модальном окне редактирования таблицы так же, как и в JSP профиля
  • Limit login attempts example
  • Сделать авторизацию REST по JWT

Доработки участников прошлых выпусков:

Жду твою доработку из списка!

Ресурсы по Проекту

Пожалуйста ответь на 4-6 вопросов по проекту, это важно!

Если проект понравился, напиши, пожалуйста, отзыв

error Замечания по резюме:

  • варианты размещения: google doc + linkedin + hh + ...
  • хорошо, если будет в html формате (например в https://pages.github.com/). Например так, на github
  • возраст и день рождения можно не писать
  • все упоминания Junior убрать!
  • линки делай кликабельными (если формат поддерживает)
  • если нет опыта в IT, обязательно вставь участие в стажировке Topjava. Также вставь ссылку на свой сертификат (она есть в личном профиле). Весь не-IT опыт можно кратко.
  • всю выгодную для себя информацию (и важную для HR) распологайте вверху. Название секций в резюме и их порядок относительно стандартный и важный
  • Внимание: резюме на hh или других ресурсах ДОЛЖНО БЫТЬ ОТКРЫТО ДЛЯ ПРОСМОТРА и иметь телефон для связи

Успехов в собеседованиях и карьере Java разработчика!

Clone this wiki locally