Инструкция по созданию бизнесобъектов. Strategy это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми
Скачать 0.73 Mb.
|
29.1. Как подключить Spring Security к проекту?1. Добавляем зависимости: spring-security-web, spring-security-config, thymeleaf-extras-springsecurity5; 2. Создаем конфиг, который расширяет AbstractSecurityWebApplicationInitializer; 3. Создаем Security-конфиг с аннотациями @Configuration @EnableWebSecurity; 3.1. Переопределяем метод configure(), в котором указывается конфигурация логина/логаута (можно указать по какому адресу находится форма логина, по какому адресу происходит обработка запроса логина, логику обработки при логине(хэндлеры), названия полей с формы логина). 3.2. Настраиваем параметры доступа по определенным url для ролей. 30. Что такое авторизация, аутентификация?Авторизация – это предоставление определенному лицу или группе лиц прав на выполнение определенных действий; а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий. Авторизацию не следует путать с аутентификацией — процедурой проверки легальности пользователя или данных, например, проверки соответствия введенного пользователем пароля к паролю учетной записи в базе данных, или проверка цифровой подписи письма по ключу шифрования, или проверка контрольной суммы файла на соответствие, заявленной автором этого файла. Авторизация же производит контроль доступа к различным ресурсам системы в процессе работы легальных пользователей после успешного прохождения ими аутентификации. Чтобы провести аутентификацию нужно сделать, по сути, два шага: 1. Извлечь имя и пароль из HTTP-запроса. За это отвечает UsernamePasswordAuthenticationFilter (конкретно в нашем приложении с Form-Based аутентификацией, модуль 3 пп); 2. Сравнить их с реальными именем и паролем, хранящимся где-то (в базе, на LDAP-сервере, во временной памяти приложения и т.д. где угодно). Это делает AuthenticationManager в методе authenticate(). Вызывается authenticate() из фильтра UsernamePasswordAuthenticationFilter сразу после извлечения имени/пароля из HTTP-запроса. 30.1. Как работает Authentication в Spring?Через метод authenticate (authentication authentication) интерфейса AuthenticationManager, который осуществляет проверку пароля. Например, нам приходит HTTP-запрос. Прежде чем попасть в контроллер, запрос проходит через цепочку фильтров. В UsernamePasswordAuthenticationFilter имя и пароль вытаскиваются из запроса. Дальше надо их сравнить с реальными. Тут то вступает в дело AuthenticationManager. Его единственный метод authenticate() выполняет аутентификацию, то есть решает, действительно ли пользователь тот, за кого себя выдает. Делегируется проверка конкретным провайдерам (в зависимости от того, как хранится реальный пользователь, проверка разнится). Authentication до аутентификации: Метод authenticate() получает на вход объект Authentication с именем и паролем, полученными от клиента и требующими проверку. Имя хранится в principal, а пароль в credenticals (до проверки, после проверки будет иначе): isAuthenticated() до аутентификации равно false. Если аутентификация не прошла (имя и пароль неверны), то выбрасывается исключение BadCredentials. В случае же успеха возвращается тоже объект Authentication, но заполненный по-другому. Authentication после аутентификации: После аутентификации в поле Principal объекта Authentication будет реальный пользователь в виде UserDetails: То есть имя и пароль перемещаются в объект Principal. Как же AuthenticationManager в authenticate() решает, правильный пароль, или нет? Очевидно, для этого надо сравнить переданный пароль с реальным. А для этого по переданному имени надо извлечь реального пользователя. И вот тут дальнейшее зависит от того, где этот пользователь хранится. 30.2. Типы аутентификации в Spring Security?Есть несколько стандартных типов хранения и извлечения пользователя, и за каждый из них отвечает свой AuthenticationProvider. AuthenticationManager делегирует провайдеру извлечь данные их хранилища. В Spring Security реализованы несколько стандартных провайдеров, все они задаются в методе configure(). 1. In-Memory – это аутентификация с использованием оперативной памяти приложения. Для сохранения информации о пользователях и выполнения аутентификации можно использовать временную базу данных, которая остается в оперативной памяти приложения. Это полезно при разработке и тестировании. Реальная база данных при таком подходе остается нетронутой. 2. JDBC – 3. LDAP (Lightweight Directory Access Protocol, облегченный протокол доступа к каталогам) — это открытый, независимый от производителя, стандартный протокол приложений для доступа и обслуживания распределенных информационных служб каталогов по IP-сети. Spring Boot предлагает автоматическую настройку для любого совместимого сервера LDAP, а также поддержку встроенного сервера LDAP в памяти из UnboundID. Абстракции LDAP предоставляются Spring Data LDAP. Существует spring-boot-starter-data-ldap стартер для удобного сбора зависимостей. 4. Кастомный, который можно написать самостоятельно. |