Файл: Spring boot, spring security и restSpring security.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.04.2024

Просмотров: 18

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Другими словами если многократное повторение одних и тех же
запросов возвращает одинаковые результаты
, то метод считается
идемпотентным
.
Идемпотентный и небезопасный
— значит, что, сколько бы ни повторялся запрос
, только первый изменит состояние системы, а остальные состояние системы не меняют.
Идемпотентный и безопасный
— многократное повторение запроса вернет одно и то же состояние системы
(если ресурс не изменился между ними по иным причинам).
Из спецификации HTTP:
Метод
Безопасный
Идемпотентный
Ссылка
CONNECT
нет нет
Section 4.3.6
DELETE
нет да
Section 4.3.5
GET
да да
Section 4.3.1
HEAD
да да
Section 4.3.2
OPTIONS
да да
Section 4.3.7
POST
нет нет
Section 4.3.3
PUT
нет да
Section 4.3.4
TRACE
да да
Section 4.3.8
● Что
такое http-заголовок? Что такое http-сессия?
HTTP Заголовки (англ. HTTP Headers) - это строки в HTTP-сообщении,
содержащие разделенную двоеточием пару параметр-значение.
Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой

Пример
:
Server: Apache/2.2.11 (Win32) PHP/5.3.0
Last-Midified: Sat, 16 Jan 2010 21:16:42 GMT
Content-Type: text/plain; charset=windows-1251
Content-Language: ru
Сессия
— это диалоговое состояние между клиентом и сервером,
включающее информацию о предыдущих запросах клиента и ответах сервера
Так как
HTTP — это клиент-серверный протокол, HTTP сессия состоит из
трёх
фаз:
Клиент устанавливает
TCP соединения (или другое соединение, если не используется
TCP транспорт).
Клиент отправляет запрос и ждёт ответа.
Сервер обрабатывает запрос и посылает ответ
, в котором содержится код статуса и соответствующие данные.
Начиная с версии
HTTP/1.1, после третьей фазы соединение не закрывается
, так как клиенту позволяется инициировать другой запрос.
То есть, вторая и третья фазы могут повторяться.
● Коды
состояний HTTP
1xx информационное
2хх успешно
3хх редирект
4хх ошибка клиента
5хх ошибка сервера
Другое
● Разница
между SpringBoot и SpringMVC
Прежде всего
, это две разные технологии, и задачи, которые они решают,
разные
Spring MVC - это фреймворк, основанный на сервлетах. Он решает проблему разработки
Web-сервисов с помощью Dispatcher Servlet и
ModelAndView. Его конфигурация громоздка, с большим количеством файлов
.xml и .properties, а при использовании сборщика проектов maven легко возникают конфликты пакетов jar.
Spring Boot - это пакет для быстрой разработки и интеграции на
основе
Spring, который включает не только Spring MVC, но также Spring
JPA и Spring Security. Призван реализовать автоматическую настройку и

снизить сложность построения проекта
. А встроенный сервер Tomcat упрощает запуск и решает проблему конфликтов пакетов jar.
● Разница
между @PathVariable и @RequestParam
Аннотация
@RequestParam используется для доступа к значениям
параметров
из запроса.
/*http://localhost:8080/springmvc/hello/101?param1=10&param2
=20
*/
public
String
getDetails
(@RequestParam(value=
"param1"
,required=
true
)
String param1, @
RequestParam
(value=
"param2"
, required=
false
)
String param2){
}
@PathVariable определяет шаблон, который используется в URI
входящего
запроса.
/*http://localhost:8080/springmvc/hello/101?param1=10&param2
=20*/
@RequestMapping
(
"/hello/{id}"
)
public
String
getDetails
(@PathVariable(value=
"id"
)String id,
@
RequestParam
(value=
"param1"
, required=
true
)String param1,
@
RequestParam
(value=
"param2"
, required=
false
)String param2){
.......
}
● Определение
реактивных потоков данных
Reactive Streams – это инициатива, запущенная в конце 2013 года инженерами из
Netflix, Lightbend и Pivotal (последняя компания в этом списке как раз и занимается разработкой
Spring). Цель Reactive Streams –
поддержка
стандарта
асинхронной
обработки
потоков
с
неблокирующим
обратным давлением (backpressure).
Это позволяет выполнять задачи параллельно и достигать большей
масштабируемости
. Обратное давление – это средство, помогающее получателям данных избежать перегрузки при работе со слишком быстрым источником данных
; с его помощью получатели могут установить ограничение на объем
, который они готовы обработать в единицу времени.

Спецификацию
Reactive Streams можно свести к четырем определениям интерфейсов
: Publisher, Subscriber, Subscription и Processor.
Издатель
Publisher создает данные и отправляет их подписчику
Subscriber. Интерфейс издателя Publisher объявляет единственный метод subscribe(), с помощью которого подписчик Subscriber может подписаться на события издателя
. После оформления подписки подписчик Subscriber
может получать события от издателя
. Эти события отправляются через методы в интерфейсе подписчика Subscriber.
Первое событие
, которое получит подписчик, – это вызов onSubscribe().
Когда издатель вызывает onSubscribe(), он передает объект Subscription подписчику
. Именно через Subscription подписчик Subscribe может
управлять
своей подпиской.
После
запроса
данных
подписчиком
Subscriber они начинают
передаваться
через поток.
Так же как подписчик
Subscriber, процессор Processor будет получать и
каким
-то образом обрабатывать данные. Затем он сменит
ориентацию и будет действовать как издатель
Publisher, чтобы опубликовать новые данные для своих подписчиков.
Следует упомянуть также об основных типах
, реализующих интерфейс
Publisher: Mono и Flux. Тип Flux представляет конвейер из произвольного количества
(от нуля до бесконечности) элементов данных.
Mono – это специализированный реактивный тип, оптимизированный для случаев
, когда известно, что набор данных содержит не более одного элемента данных.

RestTemplate vs WebClient
RestTemplate появился еще в версии Spring 3.0. В свое время он использовался для выполнения запросов от имени приложений
, которые его используют.
Но все методы
RestTemplate работают с нереактивными прикладными
типами
и коллекциями.
Spring предлагает WebClient – реактивную альтернативу RestTemplate.
WebClient позволяет отправлять и получать реактивные типы при работе с
внешними API.
Использование
WebClient сильно отличается от использования
RestTemplate. Вместо нескольких методов для работы с разными типами запросов
WebClient предлагает гибкий интерфейс в стиле конструктора,
который позволяет описывать и отправлять запросы
. Вот как выглядит
общий
алгоритм работы с WebClient:


1. создать экземпляр WebClient (или внедрить компонент WebClient);
2. указать HTTP-метод отправляемого запроса;
3. указать URI и любые заголовки, которые должны быть в запросе;
4. отправить запрос;
5. получить и использовать ответ.
Mono ingredient = WebClient.create()
.get()
.uri(
"http://localhost:8080/ingredients/{id}"
,
ingredientId)
.retrieve()
.bodyToMono(Ingredient.class);
ingredient.subscribe(i -> { ... });