Файл: Spring Security Что такое Spring Security, для чего используется.docx

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

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

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

Добавлен: 03.02.2024

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

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

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

Spring Security

1. Что такое Spring Security, для чего используется?

2. Что такое авторизация и аутентификация?

3. Объекты Principal, Authorities, Authentication.

4. Чем отличается InMemoryAuthentication от BasicAuthentication?

5. Как мы можем добавить секьюрность к контроллеру? (минимум 2

способа).

Продвинутый Hibernate

6. Связи таблиц @ManyToMany, @ManyToOne, @OneToMany, @OneToOne

7. Как работают каскады для таблиц и какие они бывают?

HTTP и REST

8. HTTP протокол – описание, структура запрос и ответа. HTTP-методы и их

работа.

9. Архитектура REST и REST-сервисы. Их преимущества и недостатки

10. Форматы данных, использующиеся в REST-сервисах

11. Что такое responseBody, requestBody, ResponseEntity

12. Чем аннотация @RestController отличается от @Controller?

13. RestTemplate и его методы.

Front-end

14. Bootstrap – что это такое, описание работы.

15. Что такое AJAX/Fetch JS

Spring Security - это фреймворк безопасности для приложений на платформе Spring. Он используется для обеспечения аутентификации и авторизации пользователей, а также для защиты приложения от атак и угроз безопасности.

Аутентификация - это процесс проверки подлинности пользователей. Авторизация - это процесс предоставления пользователям прав доступа к определенным ресурсам в системе.

Principal - это объект, представляющий аутентифицированного пользователя. Authorities - это объекты, представляющие права доступа пользователя. Authentication - это объект, содержащий информацию об аутентификации пользователя.

InMemoryAuthentication используется для хранения учетных данных пользователей в памяти приложения, в то время как BasicAuthentication используется для аутентификации пользователей с использованием HTTP-заголовка.

Таким образом, InMemoryAuthentication и BasicAuthentication - это два разных механизма аутентификации, которые используются в разных ситуациях. InMemoryAuthentication хранит учетные данные в памяти приложения, а BasicAuthentication использует HTTP-заголовок для передачи учетных данных между браузером и сервером.(закодированная строка в формате base64 ).

Мы можем добавить секьюрность к контроллеру с помощью аннотации @Secured или @RolesAllowed, или с помощью настройки конфигурации Spring Security в файле конфигурации.

@ManyToMany - связь многие-ко-многим между двумя таблицами. @ManyToOne - связь многие-к-одному между двумя таблицами. @OneToMany - связь один-ко-многим между двумя таблицами. @OneToOne - связь один-к-одному между двумя таблицами.

Каскады для таблиц позволяют выполнять операции
с одной таблицей и автоматически обновлять, удалить или вставить соответствующие строки в других таблицах. Каскады бывают CascadeType.ALL, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.DETACH и CascadeType.REFRESH.

  • CascadeType.ALL - выполняет все операции каскада: сохранение, обновление, удаление и объединение.

  • CascadeType.PERSIST - выполняет операцию сохранения, что означает, что при сохранении новой сущности все связанные сущности также будут сохранены.

  • CascadeType.MERGE - выполняет операцию объединения, что означает, что все связанные сущности будут объединены вместе с главной сущностью.

  • CascadeType.REMOVE - выполняет операцию удаления, что означает, что при удалении сущности все связанные сущности также будут удалены.

  • CascadeType.DETACH - выполняет операцию отсоединения, что означает, что при отсоединении главной сущности все связанные сущности также будут отсоединены.

  • CascadeType.REFRESH - выполняет операцию обновления, что означает, что все связанные сущности будут обновлены вместе с главной сущностью.

HTTP (Hypertext Transfer Protocol) - это протокол передачи данных в Интернете. Запрос HTTP состоит из метода, URL-адреса, заголовков и тела запроса. Ответ HTTP состоит из статуса ответа, заголовков и тела ответа. HTTP-методы - это GET, POST, PUT, DELETE, HEAD, OPTIONS и TRACE. Они определяют тип операции, выполняемой на ресурсе.

  • GET: используется для получения ресурса с сервера.

  • POST: используется для отправки данных на сервер для обработки.

  • PUT: используется для обновления ресурса на сервере.

  • DELETE: используется для удаления ресурса на сервере.

  • HEAD: используется для получения заголовков ответа без получения тела ответа.

  • OPTIONS: используется для получения информации о поддерживаемых методах и функциях сервера.

  • TRACE: используется для получения копии запроса, отправленного на сервер, для отладки и диагностики.

REST (Representational State Transfer) - это архитектурный стиль для разработки веб-сервисов. Он основан на использовании HTTP-протокола для передачи данных и определяет набор ограничений для упрощения коммуникации между клиентом и сервером. Преимущества REST-сервисов - простота и гибкость, легкая масштабируемость, универсальность, возможность использования в различных клиентских приложениях. Недостатки - сложность при работе с более сложными операциями, ограниченность в выборе форматов передачи данных.



В REST-сервисах используются различные форматы данных для передачи информации между клиентом и сервером, такие как JSON (JavaScript Object Notation), XML (Extensible Markup Language) и YAML (YAML Ain't Markup Language).

@ResponseBody и @RequestBody - это аннотации в Spring, которые используются для маршалинга данных в HTTP-запросах и ответах. @ResponseBody позволяет возвращать данные в теле ответа в виде объекта, а @RequestBody позволяет принимать данные в теле запроса в виде объекта. ResponseEntity - это класс в Spring, который используется для возврата ответа с заданными статусом, заголовками и телом ответа.

@RestController и @Controller - это аннотации в Spring, которые используются для создания контроллеров веб-приложений. @RestController объединяет в себе функциональность аннотаций @Controller и @ResponseBody, что делает контроллер более простым и читаемым.

RestTemplate - это класс в Spring, который предоставляет удобный способ для выполнения HTTP-запросов к удаленному веб-серверу из веб-приложения. Он предоставляет несколько методов для выполнения различных типов HTTP-запросов, таких как GET, POST, PUT и DELETE, и может использоваться для работы с REST-сервисами.

RestTemplate в Spring также предоставляет возможность работать с данными в различных форматах, таких как JSON, XML и других. Он автоматически выполняет процесс маршалинга и демаршалинга данных, что упрощает разработку и улучшает читаемость кода. RestTemplate также поддерживает аутентификацию и использование HTTPS для безопасной передачи данных.

Bootstrap - это библиотека CSS и JavaScript, которая содержит набор готовых компонентов и стилей для быстрой и простой разработки адаптивных веб-сайтов и приложений. Она позволяет создавать красивый и современный дизайн без необходимости писать много кода.

AJAX (Asynchronous JavaScript and XML) и Fetch JS - это технологии, позволяющие отправлять и получать данные между клиентом и сервером без перезагрузки страницы.

AJAX использует объект XMLHttpRequest (XHR) для отправки асинхронных HTTP-запросов на сервер и обновления части веб-страницы без перезагрузки. Он может быть использован для получения и отправки различных форматов данных, включая HTML, XML, JSON и другие.

Fetch JS - это более новая технология, предоставляющая упрощенный интерфейс для отправки HTTP-запросов. Он также поддерживает асинхронность и работает с различными форматами данных.

Использование AJAX и Fetch JS позволяет создавать более динамические и интерактивные веб-приложения, которые могут обмениваться данными с сервером без перезагрузки страницы.
Однако, необходимо быть осторожным с использованием этих технологий, так как неправильная реализация может привести к проблемам безопасности и производительности

Дополнительные вопросы :

  1. LazyInitializationException - это исключение, которое возникает при попытке доступа к отложенной (лениво загруженной) коллекции или свойству объекта в Hibernate или другой ORM-библиотеке.

Отложенная загрузка позволяет загружать связанные сущности только по мере необходимости, что может улучшить производительность при работе с большими объемами данных. Однако, если попытаться получить доступ к лениво загруженной коллекции после закрытия сессии или транзакции, возникает исключение LazyInitializationException.

Чтобы решить эту проблему, можно использовать специальные методы, такие как Hibernate.initialize() или entityManager.getReference(), чтобы явно инициализировать объекты и коллекции до закрытия сессии или транзакции. Также можно настроить Fetch-стратегию в маппинге сущностей, чтобы Hibernate автоматически загружал связанные объекты, когда они будут запрошены.

  1. Проблема n + 1 (n+1 problem) - это проблема, возникающая при использовании ORM-библиотеки при работе с коллекциями. Эта проблема возникает, когда при запросе списка объектов, ORM-библиотека выполняет n+1 SQL-запросов к базе данных, где n - количество объектов в списке. Например, если нужно получить список авторов книг и для каждого автора получить список его книг, то при использовании ORM-библиотеки может возникнуть проблема n+1, при которой для каждого автора будет выполнен отдельный SQL-запрос на получение списка его книг.

Это может привести к значительному ухудшению производительности при работе с большими объемами данных. Решение этой проблемы может быть достигнуто, например, путем использования Fetch-стратегии в маппинге сущностей или использованием JPA-запросов с использованием JOIN FETCH.

  1. Каскады - это механизмы, используемые в ORM-библиотеках для автоматического распространения операций на связанные объекты. Каскады позволяют автоматически сохранять, обновлять или удалять связанные сущности, когда происходят соответствующие операции с основной сущностью.

Примеры каскадов:

  • CascadeType.ALL - автоматически распространяет все операции на связанные объекты

  • CascadeType.PERSIST - автоматически сохраняет связанные

Маршалинг
(англ. marshalling) - процесс преобразования объекта в последовательность байтов, которую можно сохранить в файле или передать по сети для дальнейшего использования в программе или на другом компьютере. Процесс обратного преобразования последовательности байтов в объект называется демаршалингом (англ. unmarshalling). Маршалинг используется для передачи данных между программами на разных языках программирования или между программами, работающими на разных платформах.

что такое хранимые процедуры ? для чего они нужны ?

Хранимая процедура - это набор предопределенных SQL-операторов, которые сохранены в базе данных и могут быть вызваны при необходимости.

Хранимые процедуры могут выполнять различные задачи, такие как чтение, обновление или удаление данных, а также проводить более сложные операции, такие как проверка целостности данных, анализ данных и принятие решений на основе этих данных.

Одним из основных преимуществ использования хранимых процедур является уменьшение количества трафика между приложением и базой данных. При вызове хранимой процедуры, все операции выполняются на стороне базы данных, что позволяет сократить время ответа и увеличить производительность.

Хранимые процедуры также могут быть использованы для повторного использования кода. Когда набор SQL-операторов сохранен в виде хранимой процедуры, он может быть вызван из различных приложений и сценариев без необходимости повторного написания кода.

Кроме того, хранимые процедуры могут обеспечить более высокий уровень безопасности, поскольку они могут быть вызваны только с определенными правами доступа.

Однако, следует учитывать, что создание и управление хранимыми процедурами требует дополнительных усилий и навыков, а также может сделать код менее легким для чтения и понимания.

внутренние классы , типы

Внутренние классы - это классы, которые определены внутри других классов. В Java внутренние классы делятся на четыре типа:

Вложенные статические классы (static nested classes) - это внутренние классы, которые объявлены как статические. Они не имеют доступа к нестатическим членам внешнего класса, но могут быть созданы без создания экземпляра внешнего класса.

Внутренние классы (inner classes