1. Gambaran keseluruhan
Spring Security memberikan sokongan yang baik untuk integrasi dengan Spring Data. Walaupun yang pertama menangani aspek keselamatan aplikasi kami, yang kedua memberikan akses mudah ke pangkalan data yang berisi data aplikasi.
Dalam artikel ini, kita akan membincangkan bagaimana Spring Security dapat diintegrasikan dengan Spring Data untuk membolehkan lebih banyak pertanyaan khusus pengguna .
2. Keselamatan Spring + Konfigurasi Data Musim Semi
Dalam pengenalan kami ke Spring Data JPA, kami melihat cara menyiapkan Spring Data dalam projek Spring. Untuk mengaktifkan keselamatan musim semi dan data musim semi, seperti biasa, kita dapat menggunakan konfigurasi berbasis Java atau XML.
2.1. Konfigurasi Java
Ingatlah bahawa dari Spring Security Login Form (bahagian 4 & 5), kami dapat menambahkan Spring Security ke projek kami menggunakan konfigurasi berdasarkan anotasi:
@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { // Bean definitions }
Perincian konfigurasi lain termasuk definisi saringan, kacang, dan peraturan keselamatan lain seperti yang diperlukan.
Untuk mengaktifkan Spring Data dalam Spring Security, kami hanya menambahkan kacang ini ke WebSecurityConfig :
@Bean public SecurityEvaluationContextExtension securityEvaluationContextExtension() { return new SecurityEvaluationContextExtension(); }
Definisi di atas membolehkan pengaktifan penyelesaian secara automatik ungkapan spesifik data musim bunga yang dijelaskan pada kelas.
2.2. Konfigurasi XML
Konfigurasi berasaskan XML bermula dengan kemasukan ruang nama Spring Security:
...
Sama seperti dalam konfigurasi berasaskan Java, untuk konfigurasi berasaskan XML atau namespace, kami akan menambahkan kacang SecurityEvaluationContextExtension ke fail konfigurasi XML:
Mendefinisikan SecurityEvaluationContextExtension menjadikan semua ungkapan umum dalam Spring Security tersedia dari dalam pertanyaan Spring Data.
Ungkapan umum seperti itu meliputi prinsipal, pengesahan, isAnonymous (), hasRole ([role]), isAuthenticated, dll.
3. Contoh Penggunaan
Mari pertimbangkan beberapa kes penggunaan Data Spring dan Spring Security.
3.1. Hadkan Kemas Kini Medan AppUser
Dalam contoh ini, kita akan melihat menyekat App Pengguna 's lastLogin bidang kemas kini untuk pengguna hanya kini disahkan.
Dengan ini, kami bermaksud bahawa kaedah updateLastLogin bila-bila masa dicetuskan, ia hanya mengemas kini medan LastLogin pengguna yang sedang disahkan.
Untuk mencapainya, kami menambahkan pertanyaan di bawah ke antara muka UserRepository kami :
@Query("UPDATE AppUser u SET u.lastLogin=:lastLogin WHERE" +" u.username = ?#{ principal?.username }") public void updateLastLogin (Date lastLogin);
Tanpa integrasi Data Musim Semi dan Keselamatan Musim Semi, biasanya kami mesti melampirkan nama pengguna sebagai hujah untuk mengemas kiniLastLogin .
Sekiranya terdapat kelayakan pengguna yang salah, proses log masuk akan gagal dan kami tidak perlu bersusah payah memastikan pengesahan akses.
3.2. Ambil Kandungan Pengguna Khusus Dengan Penomboran
Senario lain di mana Spring Data dan Spring Security berfungsi dengan sempurna adalah kes di mana kita perlu mengambil kandungan dari pangkalan data kita yang dimiliki oleh pengguna yang sedang disahkan.
Sebagai contoh, jika kita memiliki aplikasi tweeter, kita mungkin ingin memaparkan tweet yang dibuat atau disukai oleh pengguna semasa di halaman feed mereka.
Sudah tentu, ini mungkin melibatkan penulisan pertanyaan untuk berinteraksi dengan satu atau lebih jadual dalam pangkalan data kami. Dengan Spring Data dan Spring Security, ini semudah menulis:
public interface TweetRepository extends PagingAndSortingRepository { @Query("select twt from Tweet twt JOIN twt.likes as lk where lk ?#{ principal?.username } or twt.owner = ?#{ principal?.username }") Page getMyTweetsAndTheOnesILiked(Pageable pageable); }
Kerana kami mahu hasil kami diubahsuai, TweetRepository kami meluaskan PagingAndSortingRepository dalam definisi antara muka di atas.
4. Kesimpulan
Spring Data dan Spring Security integrasi memberikan banyak fleksibiliti untuk menguruskan keadaan yang disahkan dalam aplikasi Spring.
Dalam sesi ini, kami telah melihat cara menambahkan Spring Security ke Spring Data. Lebih banyak mengenai ciri kuat lain dari Spring Data atau Spring Security boleh didapati dalam koleksi artikel Spring Data dan Spring Security kami.
Seperti biasa, coretan kod boleh didapati di GitHub.