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.