Data Musim Semi dengan Keamanan Musim Semi

1. Ikhtisar

Keamanan Musim Semi memberikan dukungan yang baik untuk integrasi dengan Data Musim Semi. Sementara yang pertama menangani aspek keamanan aplikasi kita, yang terakhir menyediakan akses mudah ke database yang berisi data aplikasi.

Dalam artikel ini, kita akan membahas bagaimana Keamanan Musim Semi dapat diintegrasikan dengan Data Musim Semi untuk mengaktifkan lebih banyak kueri khusus pengguna .

2. Keamanan Pegas + Konfigurasi Data Pegas

Dalam pengantar kami ke Spring Data JPA, kami melihat cara menyiapkan Data Musim Semi dalam proyek Spring. Untuk mengaktifkan keamanan pegas dan data pegas, seperti biasa, kita dapat mengadopsi konfigurasi berbasis Java atau XML.

2.1. Konfigurasi Java

Ingatlah bahwa dari Formulir Login Keamanan Musim Semi (bagian 4 & 5), kita dapat menambahkan Keamanan Musim Semi ke proyek kita menggunakan konfigurasi berbasis anotasi:

@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { // Bean definitions }

Detail konfigurasi lainnya akan mencakup definisi filter, kacang, dan aturan keamanan lain yang diperlukan.

Untuk mengaktifkan Spring Data di Spring Security, kami cukup menambahkan kacang ini ke WebSecurityConfig :

@Bean public SecurityEvaluationContextExtension securityEvaluationContextExtension() { return new SecurityEvaluationContextExtension(); }

Definisi di atas memungkinkan aktivasi penyelesaian otomatis ekspresi spesifik data pegas yang dianotasi pada kelas.

2.2. Konfigurasi XML

Konfigurasi berbasis XML dimulai dengan penyertaan namespace Keamanan Musim Semi:

 ... 

Sama seperti dalam konfigurasi berbasis Java, untuk XML atau konfigurasi berbasis namespace, kami akan menambahkan kacang SecurityEvaluationContextExtension ke file konfigurasi XML:

Mendefinisikan SecurityEvaluationContextExtension membuat semua ekspresi umum di Spring Security tersedia dari dalam kueri Spring Data.

Ekspresi umum seperti itu termasuk prinsip, otentikasi, isAnonymous (), hasRole ([role]), isAuthenticated, dll.

3. Contoh Penggunaan

Mari pertimbangkan beberapa kasus penggunaan Spring Data dan Spring Security.

3.1. Batasi Pembaruan Bidang AppUser

Dalam contoh ini, kita akan melihat membatasi App Pengguna 's lastLogin pembaruan lapangan untuk pengguna hanya saat dikonfirmasi.

Maksud kami, setiap kali metode updateLastLogin dipicu, metode ini hanya memperbarui bidang lastLogin dari pengguna yang saat ini diautentikasi.

Untuk mencapai ini, kami menambahkan kueri di bawah ini ke antarmuka UserRepository kami :

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

Tanpa integrasi Spring Data dan Spring Security, kami biasanya harus memberikan nama pengguna sebagai argumen ke updateLastLogin .

Dalam kasus di mana kredensial pengguna yang salah diberikan, proses login akan gagal dan kita tidak perlu repot memastikan validasi akses.

3.2. Ambil Konten AppUser Tertentu Dengan Penomoran Halaman

Skenario lain di mana Spring Data dan Spring Security bekerja dengan baik secara bergandengan tangan adalah kasus di mana kami perlu mengambil konten dari database kami yang dimiliki oleh pengguna yang saat ini diautentikasi.

Misalnya, jika kita memiliki aplikasi tweeter, kita mungkin ingin menampilkan tweet yang dibuat atau disukai oleh pengguna saat ini di halaman feed yang dipersonalisasi.

Tentu saja, ini mungkin melibatkan penulisan kueri untuk berinteraksi dengan satu atau lebih tabel di database 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); }

Karena kami ingin hasil kami diberi nomor halaman, TweetRepository kami memperluas PagingAndSortingRepository dalam definisi antarmuka di atas.

4. Kesimpulan

Integrasi Spring Data dan Spring Security menghadirkan banyak fleksibilitas untuk mengelola status terautentikasi dalam aplikasi Spring.

Dalam sesi ini, kita telah melihat cara menambahkan Keamanan Musim Semi ke Data Musim Semi. Selengkapnya tentang fitur canggih lainnya dari Spring Data atau Spring Security dapat ditemukan di koleksi artikel Spring Data dan Spring Security kami.

Seperti biasa, potongan kode dapat ditemukan di GitHub.