Spring Data met Spring Security

1. Overzicht

Spring Security biedt een goede ondersteuning voor integratie met Spring Data. Terwijl de eerste de beveiligingsaspecten van onze applicatie behandelt, biedt de laatste gemakkelijke toegang tot de database met de gegevens van de applicatie.

In dit artikel bespreken we hoe Spring Security kan worden geïntegreerd met Spring Data om meer gebruikersspecifieke vragen mogelijk te maken.

2. Spring Security + Spring Data Configuratie

In onze inleiding tot Spring Data JPA hebben we gezien hoe Spring Data in een Spring-project kan worden opgezet. Om veerbeveiliging en veergegevens mogelijk te maken, kunnen we, zoals gewoonlijk, de op Java of XML gebaseerde configuratie gebruiken.

2.1. Java-configuratie

Bedenk dat we vanuit Spring Security Login Form (secties 4 & 5) Spring Security aan ons project kunnen toevoegen met behulp van de op annotatie gebaseerde configuratie:

@EnableWebSecurity openbare klasse WebSecurityConfig breidt WebSecurityConfigurerAdapter {// Bean-definities} uit

Andere configuratiedetails omvatten de definitie van filters, bonen en andere beveiligingsregels zoals vereist.

Om Spring Data in Spring Security mogelijk te maken, voegen we deze bean eenvoudig toe aan WebSecurityConfig:

@Bean openbare SecurityEvaluationContextExtension securityEvaluationContextExtension () {retourneer nieuwe SecurityEvaluationContextExtension (); }

De bovenstaande definitie maakt activering mogelijk van het automatisch oplossen van spring-data-specifieke uitdrukkingen die zijn geannoteerd op klassen.

2.2. XML-configuratie

De XML-gebaseerde configuratie begint met de opname van de Spring Security-naamruimte:

 ... 

Net als in de op Java gebaseerde configuratie, zouden we voor de op XML of naamruimte gebaseerde configuratie SecurityEvaluationContextExtension bean naar het XML-configuratiebestand:

Het definiëren van de SecurityEvaluationContextExtension maakt alle gangbare uitdrukkingen in Spring Security beschikbaar vanuit Spring Data-queries.

Dergelijke veel voorkomende uitdrukkingen zijn onder meer principal, authentication, isAnonymous (), hasRole ([role]), isAuthenticated, enz.

3. Voorbeeldgebruik

Laten we eens kijken naar enkele use-cases van Spring Data en Spring Security.

3.1. Beperken AppGebruiker Veldupdate

In dit voorbeeld kijken we naar beperking AppGebruiker‘S laatste aanmelding veldupdate naar de enige momenteel geauthenticeerde gebruiker.

Hiermee bedoelen we dat altijd updateLastLogin methode wordt geactiveerd, wordt alleen de laatste aanmelding veld van de momenteel geauthenticeerde gebruiker.

Om dit te bereiken, voegen we de onderstaande vraag toe aan onze UserRepository koppel:

@Query ("UPDATE AppUser u SET u.lastLogin =: lastLogin WAAR" + "u.username =? # {Principal? .Username}") public void updateLastLogin (Datum lastLogin);

Zonder Spring Data- en Spring Security-integratie zouden we normaal gesproken de gebruikersnaam als argument moeten doorgeven aan updateLastLogin.

In het geval dat de verkeerde gebruikersreferenties worden verstrekt, zal het inlogproces mislukken en hoeven we ons geen zorgen te maken over het valideren van de toegang.

3.2. Specifiek ophalen Appgebruiker ' Inhoud met paginering

Een ander scenario waarin Spring Data en Spring Security perfect hand in hand werken, is een geval waarin we inhoud moeten ophalen uit onze database die eigendom is van de momenteel geverifieerde gebruiker.

Als we bijvoorbeeld een tweeter-applicatie hebben, willen we misschien tweets weergeven die zijn gemaakt of geliked door de huidige gebruiker op hun gepersonaliseerde feeds-pagina.

Dit kan natuurlijk het schrijven van vragen inhouden om met een of meer tabellen in onze database te communiceren. Met Spring Data en Spring Security is dit zo simpel als schrijven:

openbare interface TweetRepository breidt PagingAndSortingRepository {@Query ("selecteer twt uit Tweet twt JOIN twt.likes als lk waar lk? # {principal? .username} of twt.owner =? # {principal? .username}") Pagina getMyTweetsAndTheOnesILiked (Pageable pageable); }

Omdat we willen dat onze resultaten worden gepagineerd, is onze TweetRepository strekt zich uit PagingAndSortingRepository in de bovenstaande interfacedefinitie.

4. Conclusie

Spring Data en Spring Security-integratie bieden veel flexibiliteit bij het beheren van geverifieerde statussen in Spring-applicaties.

In deze sessie hebben we bekeken hoe we Spring Security kunnen toevoegen aan Spring Data. Meer over andere krachtige functies van Spring Data of Spring Security kunt u vinden in onze verzameling Spring Data- en Spring Security-artikelen.

Zoals gewoonlijk zijn codefragmenten te vinden op GitHub.