Tavaszi biztonság: Hitelesítés egy adatbázis által támogatott UserDetailsService szolgáltatással

1. Áttekintés

Ebben a cikkben bemutatjuk, hogyan hozhat létre egyedi adatbázis-alapú UserDetailsService a Spring Security hitelesítéséhez.

2. UserDetailsService

A UserDetailsService interfész a felhasználóval kapcsolatos adatok lekérésére szolgál. Ennek egy neve van loadUserByUsername () amely felülírható a felhasználó megtalálásának folyamatának testreszabása érdekében.

A DaoAuthenticationProvider a hitelesítés során a felhasználó adatainak betöltése.

3. Az Felhasználó Modell

A felhasználók tárolásához létrehozunk egy Felhasználó adatbázis-táblához hozzárendelt entitás a következő attribútumokkal:

@Entity public class User {@Id @GeneratedValue (strategy = GenerationType.AUTO) private Long id; @ Oszlop (nullable = false, egyedi = true) private String felhasználónév; privát karakterlánc jelszó; // szabványos mérőeszközök és beállítók}

4. Felhasználó beolvasása

A felhasználónévhez társított felhasználó beolvasása céljából létrehozunk egy DAO osztály felhasználásával Tavaszi adatok kiterjesztésével JpaRepository felület:

nyilvános felület A UserRepository kiterjeszti a JpaRepository {User findByUsername (String felhasználónév); }

5. A UserDetailsService

Saját felhasználói szolgáltatásunk biztosításához a UserDetailsService felület.

Létrehozunk egy osztályt MyUserDetailsService ez felülírja a módszert loadUserByUsername () az interfész.

Ebben a módszerben lekérjük a Felhasználó objektum a DAO, és ha létezik, csomagolja be a MyUserPrincipal tárgy, amely megvalósítja UserDetails, és visszaadja:

@Service public class A MyUserDetailsService megvalósítja a UserDetailsService {@Autowired private UserRepository userRepository; @ Nyilvános felhasználói adatok felülírása loadUserByUsername (String felhasználónév) {User user = userRepository.findByUsername (felhasználónév); if (user == null) {dob új felhasználónévNotFoundException (felhasználónév); } return new MyUserPrincipal (felhasználó); }}

Határozzuk meg a MyUserPrincipal osztály az alábbiak szerint:

public class A MyUserPrincipal megvalósítja a UserDetails {private User user; public MyUserPrincipal (Felhasználó felhasználó) {this.user = user; } // ...}

6. Tavaszi konfiguráció

Bemutatjuk a Spring konfigurációk mindkét típusát: XML és annotáció alapú, amelyek szükségesek a szokásaink használatához UserDetailsService végrehajtás.

6.1. Megjegyzés konfigurálása

Mindössze annyit kell tennünk, hogy lehetővé tegyük szokásunkat UserDetailsService babként adja hozzá alkalmazási környezetünkhöz.

Mivel az osztályunkat a @Szolgáltatás Megjegyzés: az alkalmazás automatikusan észleli az alkatrész-vizsgálat során, és babot hoz létre ebből az osztályból. Ezért itt semmi mást nem kell tennünk.

Alternatív megoldásként:

  • konfigurálja a authenticationManager használni a AuthenticationManagerBuilder # userDetailsService módszer
  • állítsa be tulajdonságként egy szokásban authenticationProvider babot, majd a AuthenticationManagerBuilder # authenticationProvider funkció

6.2. XML konfiguráció

Másrészt az XML konfigurációhoz meg kell határoznunk egy babot típusal MyUserDetailsService, és fecskendezze be a Tavaszba hitelesítés-szolgáltató bab:

7. Egyéb adatbázis-alapú hitelesítési lehetőségek

A AuthenticationManagerBuilder egy másik módszert kínál a JDBC-alapú hitelesítés konfigurálására alkalmazásunkban.

Be kell állítanunk a AuthenticationManagerBuilder.jdbcAuthentication val,-vel Adatforrás példa. Ha adatbázisunk a tavaszi felhasználói sémát követi, akkor az alapértelmezett konfigurációk jól állnak nekünk.

Láthattunk egy alapkonfigurációt, amely ezt a megközelítést használja egy előző bejegyzésünkben.

A JdbcUserDetailsManager Az ebből a konfigurációból származó entitás végrehajtja a UserDetailsService is.

Ennek eredményeként arra a következtetésre juthatunk, hogy ezt a konfigurációt könnyebb megvalósítani, különösen, ha a Spring Boot alkalmazást használjuk, amely automatikusan konfigurálja a Adatforrás nekünk.

Ha mindenesetre nagyobb rugalmasságra van szükségünk, pontosan szabva, hogy az alkalmazás hogyan fogja lekérni a felhasználó adatait, akkor az ebben az oktatóanyagban követett megközelítést választjuk.

8. Következtetés

Összefoglalva, ebben a cikkben bemutattuk, hogyan lehet egyéni tavaszi alapú létrehozni UserDetailsService kitartó adatokkal alátámasztva.

A megvalósítás megtalálható a GitHub projektben - ez egy Maven alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.