-
Notifications
You must be signed in to change notification settings - Fork 35
Lesson 11
Vladimir edited this page Feb 9, 2019
·
1 revision
Онлайн проекта Topjava
Обновил Демо приложение нашей версией
Все материалы проекта (в том числе и будущие выпуски) останутся доступны в Google Drive
- переименовал контроллеры Ajax -> Ui
new ResponseEntityпеределал в билдеры- другие мелкие правки
1. HW10
- В соответствии со спицификацией для поменял
HTTP 400(ошибка в структуре сообщения) наHTTP 422(ошибка в содержании)- Сделал тесты и проверку типа ошибки через jsonPath
- сделал код(ключ) i18n константой (
EXCEPTION_DUPLICATE_EMAIL)
- Реализавать обработку дублирования
user.emailиmeal.dateTimeможно по разному
- через поиск в сообщении
DataIntegrityViolationExceptionимени DB constrains- через Controller Based Exception Handling
- через Custom Validator, с еще одним запросом в базу.
Первый самый простой и расширяемый (хотя зависить от базы), выбрал его. Для работы с HSQLDB сделал toLowerCase. Самый корректный и трудоемкий с собственными валидаторами: он позволяет валидировать в конроллерах, а не при сохранении.
- Сделал утильный класс
MessageUtilдля работы с i18n.- Добавил тесты на дублирование. Отключил транзакционность в тестах на дублирование через
@Transactional(propagation = Propagation.NEVER).
- Добавил локализацию календаря
$.datetimepicker.setLocale(localeCode)- Вместо смену локали в
lang.jspчерез javascript сделалhref=${requestScope['javax.servlet.forward.request_uri']}?lang=..- Добавил Collapsing The Navigation Bar
- Добавил локализацию Search в datatable
- Сделал локализацию ошибок валидации:
- Все коды для локализации конкретной ошибки валидации можно посмотреть в дебаге:
FieldError.getCodes() - Коды для ее аргументов:
FieldError.getArguments()(аргумент складывается из имени класса и поля).
- Все коды для локализации конкретной ошибки валидации можно посмотреть в дебаге:
- Добавил локализацию
ErrorInfo.type(код локализации вErrorTypeи полеErrorInfo.typeMessage) - В выводе AJAX ошибки вывожу
errorInfo.typeMessage - Увеличил ширину высплывающего noty
Попробуйте до и после патча ввести в любое текстовое поле редактирования
<script>alert('XSS')</script>и сохранить.
passwordпроверять не надо, т.к. он не выводится в html, а email надо- Сделал общий интерфейс валидации
View.Webи@Validated(View.Web.class)вместо@Validдля проверки содержимого только на входе UI/REST. При сохранении проверка на безопасный html контент не делается.
-
Автоподстановка в контроллерах
- не стал делать автоподстановку по всем контроллерам (в абстрактных контроллерах проще работать с
SecurityUtil, чем получать его через@AuthenticationPrincipalи передавать параметром)
- не стал делать автоподстановку по всем контроллерам (в абстрактных контроллерах проще работать с
-
В JSP: the authentication Tag
- авторизованный пользователь доступен в JSP через tag
authentication, интерсептор становится не нужным
- авторизованный пользователь доступен в JSP через tag
- В
AbstractUserControllerдобавилась защита от удаления-модификацииAdmin/Userдля профиляHEROKU(вAbstractUserControllerзаинжектилEnvironmentи сделал проверкуHEROKU) - Чтобы тесты были рабочими, ввел профиль
HEROKU, работающий так же, как иPOSTGRES. - Добавил
ApplicationExceptionдля работы с ошибками с поддержкой i18n в приложении (от него отнаследовалNotFoundExceptionиModificationRestrictionException)
Для тестирования с профилем heroku добавьте в VM options:
-Dspring.profiles.active="datajpa,heroku"
- проверьте, что в
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
Починка локализации
Searchв datatables:
Config Vars
ERROR_PAGE_URL=...
TOPJAVA_ROOT=/app
Datasources advanced
ssl=true
sslfactory=org.postgresql.ssl.NonValidatingFactory
- Ресурсы:
- PaaS-платформа Heroku
- Конфигурирование приложения для запуска через Tomcat-based Java Web
- Конфигурирование DataSource profile для Heroku
- Интерграция с IDEA
- Find your Platform as a Service
- Getting Started with Java on Heroku
- Managing Your SSH Keys
- Deploy your application to Heroku
- Развертывание приложений Java с помощью PaaS от Heroku
- A Java Developer’s Guide to PaaS
- A Simple PaaS Comparison Guide (With the Java Dev in Mind)
- Java PaaS shootout
- Темы/ресурсы тестового собеседования
- Составление резюме, подготовка к интервью, поиск работы
- Слайды, Книги
- Jenkins/Hudson: что такое и для чего он нужен
- Задеплоить свое приложение в 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
- Авторизация в приложение по OAuth2 через GitHub
- Авторизация в приложение по OAuth2 через GitHub/Facebook/Google
- Angular 2 UI
-
Отдельный фронтэнд на Angular 2, который работает по REST с авторизацией по JWT
- ветка development фронтэнда
- ветка development бэкэнда
- в JWT токенен приложение topjava передает email, name и роль admin как boolean true/false, на клиенте он декодируется и из него получается auth-user, с которым уже работает фронтэнд
- Уроки Bootstrap 4
- Spring at tutorialspoint
- Articles in Spring
- Learn Spring on Baeldung
- Spring Framework Reference Documentation
- Hibernate Documentation
- Java Course (книга 2)
- Справочник «Паттерны проектирования»
- Catalog of Patterns of Enterprise Application Architecture
Пожалуйста ответь на 4-6 вопросов по проекту, это важно!
Если проект понравился, напиши, пожалуйста, отзыв
- варианты размещения: google doc + linkedin + hh + ...
- хорошо, если будет в html формате (например в https://pages.github.com/). Например так, на github
- возраст и день рождения можно не писать
- все упоминания Junior убрать!
- линки делай кликабельными (если формат поддерживает)
- если нет опыта в IT, обязательно вставь участие в стажировке Topjava. Также вставь ссылку на свой сертификат (она есть в личном профиле). Весь не-IT опыт можно кратко.
- всю выгодную для себя информацию (и важную для HR) распологайте вверху. Название секций в резюме и их порядок относительно стандартный и важный
- Внимание: резюме на hh или других ресурсах ДОЛЖНО БЫТЬ ОТКРЫТО ДЛЯ ПРОСМОТРА и иметь телефон для связи
Правка
Разбор домашнего задания HW10