Файл: 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 позволяет создавать более динамические и интерактивные веб-приложения, которые могут обмениваться данными с сервером без перезагрузки страницы.
Однако, необходимо быть осторожным с использованием этих технологий, так как неправильная реализация может привести к проблемам безопасности и производительности
Дополнительные вопросы :
-
LazyInitializationException - это исключение, которое возникает при попытке доступа к отложенной (лениво загруженной) коллекции или свойству объекта в Hibernate или другой ORM-библиотеке.
Отложенная загрузка позволяет загружать связанные сущности только по мере необходимости, что может улучшить производительность при работе с большими объемами данных. Однако, если попытаться получить доступ к лениво загруженной коллекции после закрытия сессии или транзакции, возникает исключение LazyInitializationException.
Чтобы решить эту проблему, можно использовать специальные методы, такие как Hibernate.initialize() или entityManager.getReference(), чтобы явно инициализировать объекты и коллекции до закрытия сессии или транзакции. Также можно настроить Fetch-стратегию в маппинге сущностей, чтобы Hibernate автоматически загружал связанные объекты, когда они будут запрошены.
-
Проблема n + 1 (n+1 problem) - это проблема, возникающая при использовании ORM-библиотеки при работе с коллекциями. Эта проблема возникает, когда при запросе списка объектов, ORM-библиотека выполняет n+1 SQL-запросов к базе данных, где n - количество объектов в списке. Например, если нужно получить список авторов книг и для каждого автора получить список его книг, то при использовании ORM-библиотеки может возникнуть проблема n+1, при которой для каждого автора будет выполнен отдельный SQL-запрос на получение списка его книг.
Это может привести к значительному ухудшению производительности при работе с большими объемами данных. Решение этой проблемы может быть достигнуто, например, путем использования Fetch-стратегии в маппинге сущностей или использованием JPA-запросов с использованием JOIN FETCH.
-
Каскады - это механизмы, используемые в ORM-библиотеках для автоматического распространения операций на связанные объекты. Каскады позволяют автоматически сохранять, обновлять или удалять связанные сущности, когда происходят соответствующие операции с основной сущностью.
Примеры каскадов:
-
CascadeType.ALL - автоматически распространяет все операции на связанные объекты -
CascadeType.PERSIST - автоматически сохраняет связанные
Маршалинг
(англ. marshalling) - процесс преобразования объекта в последовательность байтов, которую можно сохранить в файле или передать по сети для дальнейшего использования в программе или на другом компьютере. Процесс обратного преобразования последовательности байтов в объект называется демаршалингом (англ. unmarshalling). Маршалинг используется для передачи данных между программами на разных языках программирования или между программами, работающими на разных платформах.
что такое хранимые процедуры ? для чего они нужны ?
Хранимая процедура - это набор предопределенных SQL-операторов, которые сохранены в базе данных и могут быть вызваны при необходимости.
Хранимые процедуры могут выполнять различные задачи, такие как чтение, обновление или удаление данных, а также проводить более сложные операции, такие как проверка целостности данных, анализ данных и принятие решений на основе этих данных.
Одним из основных преимуществ использования хранимых процедур является уменьшение количества трафика между приложением и базой данных. При вызове хранимой процедуры, все операции выполняются на стороне базы данных, что позволяет сократить время ответа и увеличить производительность.
Хранимые процедуры также могут быть использованы для повторного использования кода. Когда набор SQL-операторов сохранен в виде хранимой процедуры, он может быть вызван из различных приложений и сценариев без необходимости повторного написания кода.
Кроме того, хранимые процедуры могут обеспечить более высокий уровень безопасности, поскольку они могут быть вызваны только с определенными правами доступа.
Однако, следует учитывать, что создание и управление хранимыми процедурами требует дополнительных усилий и навыков, а также может сделать код менее легким для чтения и понимания.
внутренние классы , типы
Внутренние классы - это классы, которые определены внутри других классов. В Java внутренние классы делятся на четыре типа:
Вложенные статические классы (static nested classes) - это внутренние классы, которые объявлены как статические. Они не имеют доступа к нестатическим членам внешнего класса, но могут быть созданы без создания экземпляра внешнего класса.
Внутренние классы (inner classes