Jarná bezpečnosť: autentifikácia pomocou UserDetailsService zálohovaného databázou

1. Prehľad

V tomto článku si ukážeme, ako vytvoriť vlastnú databázu podloženú databázu UserDetailsService pre autentifikáciu s Spring Security.

2. UserDetailsService

The UserDetailsService rozhranie sa používa na načítanie údajov týkajúcich sa používateľov. Má jednu metódu pomenovanú loadUserByUsername () ktoré je možné prepísať, aby sa prispôsobil proces hľadania používateľa.

Používa ho Poskytovateľ DaoAuthenticationProvider načítať podrobnosti o používateľovi počas autentifikácie.

3. The Používateľ Model

Pre ukladanie používateľov vytvoríme a Používateľ entita, ktorá je namapovaná na databázovú tabuľku, s nasledujúcimi atribútmi:

@Entity verejná trieda Používateľ {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @Column (nullable = false, unique = true) private String username; súkromné ​​reťazcové heslo; // štandardné getre a setre}

4. Získanie používateľa

Na účely získania používateľa spojeného s používateľským menom vytvoríme a DAO trieda pomocou Jarné údaje rozšírením JpaRepository rozhranie:

verejné rozhranie UserRepository rozširuje JpaRepository {User findByUsername (String username); }

5. UserDetailsService

Aby sme mohli poskytovať naše vlastné užívateľské služby, budeme musieť implementovať UserDetailsService rozhranie.

Vytvoríme triedu s názvom MyUserDetailsService ktorá prepíše metódu loadUserByUsername () rozhrania.

V tejto metóde načítame Používateľ objekt pomocou DAO, a ak existuje, zabaľte ho do a MyUserPrincipal objekt, ktorý realizuje UserDetailsa vráti ho:

@ Verejná trieda služby MyUserDetailsService implementuje UserDetailsService {@Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername (String username) {User user = userRepository.findByUsername (username); if (user == null) {throw new UsernameNotFoundException (username); } vrátiť nový MyUserPrincipal (užívateľ); }}

Definujme MyUserPrincipal triedy nasledovne:

verejná trieda MyUserPrincipal implementuje UserDetails {súkromný používateľ; public MyUserPrincipal (užívateľský užívateľ) {this.user = užívateľ; } // ...}

6. Konfigurácia pružiny

Predvedieme oba typy jarných konfigurácií: XML a anotácie, ktoré sú potrebné na to, aby sme mohli použiť náš zvyk UserDetailsService implementácia.

6.1. Konfigurácia anotácie

Všetko, čo musíme urobiť, aby sme umožnili náš zvyk UserDetailsService je pridať ho do nášho kontextu aplikácie ako fazuľa.

Pretože sme našu triedu nakonfigurovali pomocou @Služba anotácia, aplikácia ju automaticky zistí počas kontroly komponentov a vytvorí z tejto triedy fazuľa. Preto tu nie je potrebné robiť nič iné.

Prípadne môžeme:

  • nakonfigurovať v authenticationManager pomocou AuthenticationManagerBuilder # userDetailsService metóda
  • nastaviť ako vlastnosť vo zvyku authenticationProvider fazuľa, a potom ju vpichnite pomocou AuthenticationManagerBuilder # authenticationProvider funkcie

6.2. Konfigurácia XML

Na druhej strane pre konfiguráciu XML musíme definovať fazuľu s typom MyUserDetailsServicea vstreknite ho do Springovej poskytovateľ autentifikácie fazuľa:

7. Ďalšie možnosti autentifikácie zálohované databázou

The AuthenticationManagerBuilder ponúka jednu ďalšiu metódu konfigurácie autentifikácie na základe JDBC v našej aplikácii.

Budeme musieť nakonfigurovať AuthenticationManagerBuilder.jdbcAuthentication s Dátový zdroj inštancia. Ak sa naša databáza riadi jarnou schémou používateľov, potom nám budú vyhovovať predvolené konfigurácie.

V predchádzajúcom príspevku sme videli základnú konfiguráciu využívajúcu tento prístup.

The JdbcUserDetailsManager entita vyplývajúca z tejto konfigurácie implementuje UserDetailsService tiež.

Vo výsledku môžeme dospieť k záveru, že táto konfigurácia sa dá ľahšie implementovať, najmä ak používame Spring Boot, ktorý automaticky konfiguruje Dátový zdroj pre nás.

Ak aj tak potrebujeme vyššiu úroveň flexibility a presné prispôsobenie spôsobu, akým aplikácia načíta údaje o používateľovi, rozhodneme sa pre prístup, ktorým sme sa riadili v tomto výučbe.

8. Záver

Ak to zhrnieme, v tomto článku sme si ukázali, ako vytvoriť vlastný Spring UserDetailsService podložené trvalými údajmi.

Implementáciu nájdete v projekte GitHub - jedná sa o projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.