Spring Data med Spring Security

1. Oversigt

Spring Security giver en god support til integration med Spring Data. Mens førstnævnte håndterer sikkerhedsaspekter af vores applikation, giver sidstnævnte bekvem adgang til databasen, der indeholder applikationens data.

I denne artikel vil vi diskutere hvordan Spring Security kan integreres med Spring Data for at muliggøre mere brugerspecifikke forespørgsler.

2. Spring Security + Spring Data Configuration

I vores introduktion til Spring Data JPA så vi, hvordan vi konfigurerede Spring Data i et Spring-projekt. For at aktivere forårssikkerhed og forårsdata kan vi som sædvanligt vedtage enten Java- eller XML-baseret konfiguration.

2.1. Java-konfiguration

Husk at fra Spring Security Login Form (sektioner 4 & 5) kan vi tilføje Spring Security til vores projekt ved hjælp af den annoteringsbaserede konfiguration:

@EnableWebSecurity offentlig klasse WebSecurityConfig udvider WebSecurityConfigurerAdapter {// Bean definitioner}

Andre konfigurationsoplysninger vil omfatte definitionen af ​​filtre, bønner og andre sikkerhedsregler efter behov.

For at aktivere forårsdata i forårsikkerhed føjer vi simpelthen denne bønne til WebSecurityConfig:

@Bean public SecurityEvaluationContextExtension securityEvaluationContextExtension () {returner ny SecurityEvaluationContextExtension (); }

Ovenstående definition muliggør aktivering af automatisk opløsning af fjerdata-specifikke udtryk, der er kommenteret på klasser.

2.2. XML-konfiguration

Den XML-baserede konfiguration begynder med medtagelsen af ​​Spring Security-navneområdet:

 ... 

Ligesom i den Java-baserede konfiguration, for den XML- eller navneområdet-baserede konfiguration, tilføjede vi SecurityEvaluationContextExtension bønne til XML-konfigurationsfilen:

Definition af SecurityEvaluationContextExtension gør alle de almindelige udtryk i Spring Security tilgængelige inden for Spring Data-forespørgsler.

Sådanne almindelige udtryk inkluderer princip, godkendelse, erAnonym (), hasRole ([rolle]), er godkendt, etc.

3. Eksempel på anvendelse

Lad os overveje nogle brugstilfælde af Spring Data og Spring Security.

3.1. Begrænse AppUser Feltopdatering

I dette eksempel ser vi på at begrænse AppBruger'S sidste login feltopdatering til den eneste i øjeblikket godkendte bruger.

Med dette mener vi det når som helst updateLastLogin metode udløses, opdaterer den kun sidste login felt for den aktuelt godkendte bruger.

For at opnå dette tilføjer vi forespørgslen nedenfor til vores UserRepository grænseflade:

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

Uden Spring Data og Spring Security-integration skulle vi normalt videregive brugernavnet som et argument til updateLastLogin.

I et tilfælde, hvor der gives de forkerte brugeroplysninger, mislykkes loginprocessen, og vi behøver ikke gider med at sikre validering af adgang.

3.2. Hent specifikt AppUser ' Indhold med paginering

Et andet scenario, hvor Spring Data og Spring Security fungerer perfekt hånd i hånd, er et tilfælde, hvor vi har brug for at hente indhold fra vores database, der ejes af den aktuelt godkendte bruger.

For eksempel, hvis vi har en tweeter-applikation, vil vi måske vise tweets, der er oprettet eller lide af den aktuelle bruger på deres personlige feeds-side.

Selvfølgelig kan dette omfatte skrivning af forespørgsler for at interagere med en eller flere tabeller i vores database. Med Spring Data og Spring Security er dette så simpelt som at skrive:

offentlig grænseflade TweetRepository udvider PagingAndSortingRepository {@Query ("vælg twt fra Tweet twt JOIN twt.likes som lk hvor lk? # {principal? .username} eller twt.owner =? # {principal? .username}") Side getMyTweetsAndTheOnesILiked (Pageable sidelig); }

Fordi vi vil have vores resultater pagineret, vores TweetRepository strækker sig PagingAndSortingRepository i ovenstående interface-definition.

4. Konklusion

Spring Data og Spring Security-integration giver stor fleksibilitet til styring af godkendte tilstande i Spring-applikationer.

I denne session har vi kigget på, hvordan vi tilføjer Spring Security til Spring Data. Mere om andre kraftfulde funktioner i Spring Data eller Spring Security kan findes i vores samling af Spring Data og Spring Security-artikler.

Som sædvanligt kan kodeuddrag findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found