Материалы открытого занятия

Вступление

1. Что такое Spring-Boot. Первое приложение / Spring Initializr

2. Spring Boot maven plugin. Конвертация в WAR. Детали реализации

3. Настройка проекта

git clone https://github.com/JavaOPs/bootjava.git
cd bootjava
git remote add [REMOTE_ALIAS] [url_на_свой_репозиторий.git]   # добавить [REMOTE_ALIAS] на свой github
git remote -v                         # посмотреть текущие настройки
git push -u [REMOTE_ALIAS] master     # push + сделать [REMOTE_ALIAS] удаленным репозиторием по умолчанию

4. Проект Lombok

Работа с DB (H2, Spring Data JPA)

5. Spring Data JPA. ApplicationRunner

6. H2. Популирование и конфигурирование

Apply patch 1_03_h2_init.patch

H2 Консоль

# ImMemory url: jdbc:h2:mem:voting tcp: jdbc:h2:tcp://localhost:9092/mem:voting # Absolute path url: jdbc:h2:C:/projects/bootjava/restorant-voting/db/voting tcp: jdbc:h2:tcp://localhost:9092/C:/projects/bootjava/restorant-voting/db/voting # Relative path form current dir url: jdbc:h2:./db/voting # Relative path from home url: jdbc:h2:~/voting tcp: jdbc:h2:tcp://localhost:9092/~/voting

7. Рефакторинг model. Spring Data JPA @Query

Spring Data REST + HATEOAS

8. Spring Data REST

9. Конфигурирование Jackson

Spring Security

10. Подключение. Аутентификация по умолчанию

11. Password Encoding. Получение залогиненного пользователя в приложении

12. Аутентификация пользователя из БД. AuthUser

13. Basic authorization. Кастомизация Json

Apply patch 1_10_fix_auth.patch
  • GET http://localhost:8080/api/account
  • POST http://localhost:8080/api/users
    Content-Type: application/json
    #Authorization: Basic user@gmail.com 123
    #Authorization: Basic user@gmail.com password
    Authorization: Basic admin@javaops.ru admin
    
    {
     "email": "test@test.com",
     "firstName": "Test",
     "lastName": "Test",
     "password": "test",
     "roles": [ "ROLE_USER","ROLE_ADMIN"]
    }
    

14. Валидация. REST AccountController

  • PUT http://localhost:8080/api/account
    Content-Type: application/json
    Authorization: Basic user@gmail.com password
    
    {
     "email": "user@gmail.com",
     "firstName": "New_First",
     "lastName": "New_Last"
    }
    
    ###
    POST http://localhost:8080/api/account/register
    Content-Type: application/json
    
    {
     "email": "test@test.com",
     "firstName": "Test",
     "lastName": "Test",
     "password": "test",
    }
    
    ###
    GET http://localhost:8080/api/account
    Authorization: Basic test@test.com test
    

Домашнее задание:

  • В AccountController сделать метод смены пароля (с проверкой старого пароля)
    • Реализацию сделайте одним запросом к БД
    • При неверном пароле сделайте код возврата 400 (BAD_REQUEST), см. Spring rest error handling example
  • Optional: добавить AccountController в spring-data-rest /api