Рубрики
Без рубрики

Данные Spring с защитой Spring

См.раздел Интеграция данных Spring с Spring Security.

Автор оригинала: baeldung.

1. Обзор

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

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

2. Весенняя безопасность + Весенняя конфигурация данных

В нашем введении в Spring Data JPA мы рассмотрели , как настроить Spring Data в проекте Spring. Чтобы включить spring security и spring data, как обычно, мы можем использовать конфигурацию на основе Java или XML.

2.1. Конфигурация Java

Напомним, что из формы входа в Spring Security (разделы 4 и 5) мы можем добавить Spring Security в наш проект, используя конфигурацию на основе аннотаций:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    // Bean definitions
}

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

Чтобы включить Spring Data в Spring Security, мы просто добавляем этот компонент в WebSecurityConfig :

@Bean
public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
    return new SecurityEvaluationContextExtension();
}

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

2.2. Конфигурация XML

Конфигурация на основе XML начинается с включения пространства имен безопасности Spring:


...

Как и в конфигурации на основе Java, для конфигурации на основе XML или пространства имен мы добавим SecurityEvaluationContextExtension bean в файл конфигурации XML:

Определение Securityevaluationcontextension делает все общие выражения в Spring Security доступными из запросов данных Spring.

Такие общие выражения включают принципал, аутентификация, является анонимным(), hasRole([роль]), аутентифицируется, и т. Д.

3. Пример использования

Давайте рассмотрим некоторые примеры использования Spring Data и Spring Security.

3.1. Ограничить обновление поля пользователя приложения

В этом примере мы рассмотрим ограничение App User ‘s последнего входа в систему обновления поля для единственного в данный момент аутентифицированного пользователя.

Под этим мы подразумеваем, что в любое время, когда запускается метод updateLastLogin , он обновляет только поле lastLogin текущего аутентифицированного пользователя.

Для достижения этой цели мы добавляем приведенный ниже запрос в наш интерфейс UserRepository :

@Query("UPDATE AppUser u SET u.lastLogin=:lastLogin WHERE" 
  +" u.username = ?#{ principal?.username }")
public void updateLastLogin (Date lastLogin);

Без интеграции Spring Data и Spring Security нам обычно приходилось бы передавать имя пользователя в качестве аргумента в updateLastLogin .

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

3.2. Извлекайте Контент Конкретного Пользователя Приложения С Помощью Разбиения На Страницы

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

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

Конечно, это может включать написание запросов для взаимодействия с одной или несколькими таблицами в нашей базе данных. С Spring Data и Spring Security это так же просто, как писать:

public interface TweetRepository extends PagingAndSortingRepository {
    @Query("select twt from Tweet twt  JOIN twt.likes as lk where lk ="+
      " ?#{ principal?.username } or twt.owner = ?#{ principal?.username }")
    Page getMyTweetsAndTheOnesILiked(Pageable pageable);
}

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

4. Заключение

Интеграция Spring Data и Spring Security обеспечивает большую гибкость в управлении состояниями аутентификации в приложениях Spring.

В этом сеансе мы рассмотрели, как добавить безопасность Spring к данным Spring. Более подробную информацию о других мощных функциях Spring Data или Spring Security можно найти в нашей коллекции статей Spring Data и Spring Security.

Как обычно, фрагменты кода можно найти на GitHub .