Keselamatan Musim Bunga dengan Maven

1. Gambaran keseluruhan

Dalam artikel ini, kami akan menerangkan cara menyiapkan Spring Security dengan Maven dan membincangkan kes penggunaan tertentu menggunakan pergantungan Spring Security. Anda boleh mendapatkan siaran Spring Security terbaru di Maven Central.

Ini adalah susulan artikel Spring dengan Maven sebelumnya, jadi untuk pergantungan Spring yang tidak selamat, itulah tempat untuk memulakan.

2. Keselamatan Musim Semi Bersama Maven

2.1. inti keselamatan-musim bunga

Sokongan Core Spring Security - spring-security-core - mengandungi pengesahan dan fungsi kawalan akses. Ketergantungan ini wajib disertakan untuk semua projek yang menggunakan Spring Security.

Selain itu, spring-security-core menyokong aplikasi mandiri (bukan web), tahap keselamatan kaedah dan JDBC:

 5.3.4.RELEASE 5.2.8.RELEASE   org.springframework.security spring-security-core ${spring-security.version} 

Perhatikan bahawa Spring dan Spring Security berada dalam jadual pelepasan yang berbeza , jadi tidak selalu ada pertandingan 1: 1 antara nombor versi.

Sekiranya anda bekerja dengan versi Spring yang lebih lama - juga sangat penting untuk difahami adalah hakikat bahawa, secara tidak sengaja, Spring Security 4.1.x tidak bergantung pada keluaran Spring 4.1.x! Sebagai contoh, ketika Spring Security 4.1.0 dilepaskan, rangka inti Spring sudah berada di 4.2.x dan dengan itu menyertakan versi itu sebagai ketergantungan kompilasinya. Rancangannya adalah untuk menyelaraskan pergantungan ini dengan lebih dekat dalam siaran masa depan - lihat JIRA ini untuk maklumat lebih lanjut - tetapi buat masa ini, ini mempunyai implikasi praktikal yang akan kita lihat seterusnya.

2.2. web keselamatan-musim bunga

Untuk menambahkan sokongan Web untuk Spring Security , kami memerlukan pergantungan web-security-spring :

 org.springframework.security spring-security-web ${spring-security.version} 

Ini mengandungi penapis dan infrastruktur keselamatan web yang berkaitan yang membolehkan kawalan akses URL di persekitaran Servlet.

2.3. Masalah Keselamatan Musim Semi dan Ketergantungan Teras Musim Semi yang Lebih Lama

Ketergantungan baru ini juga menunjukkan masalah untuk grafik kebergantungan Maven. Seperti yang disebutkan di atas, balang Keselamatan Spring tidak bergantung pada balang inti Spring terbaru (tetapi pada versi sebelumnya). Ini mungkin menyebabkan kebergantungan yang lebih tua ini berjalan di puncak kelas dan bukannya artifak Spring 5.x yang lebih baru.

Untuk memahami mengapa ini berlaku, kita perlu melihat bagaimana Maven menyelesaikan konflik. Sekiranya terdapat konflik versi, Maven akan memilih balang yang paling dekat dengan akar pokok. Sebagai contoh, spring-core ditakrifkan oleh spring-orm (dengan versi 5.0.0 .RELEASE ) tetapi juga oleh spring-security-core (dengan versi 5.0.2.RELEASE ). Oleh itu, dalam kedua-dua kes, spring-jdbc ditentukan pada kedalaman 1 dari root pom projek kami. Oleh kerana itu, ia sebenarnya akan perkara di mana perintah spring-ORM dan bunga-keselamatan-core diberikan di dalam pom kita sendiri. Yang pertama akan diutamakan begitukita mungkin berakhir dengan kedua-dua versi di classpath kita .

Untuk mengatasi masalah ini, kita harus secara jelas menentukan beberapa ketergantungan Spring di pom kita sendiri dan tidak bergantung pada mekanisme penyelesaian ketergantungan Maven yang tersirat. Melakukan ini akan meletakkan kebergantungan tertentu pada kedalaman 0 dari pom kita (seperti yang ditentukan dalam pom itu sendiri) sehingga akan menjadi keutamaan. Semua perkara berikut termasuk dalam kategori yang sama dan semuanya perlu ditentukan secara eksplisit, sama ada secara langsung atau, untuk projek berbilang modul, dalam elemen dependencyManagement ibu bapa:

 org.springframework spring-core ${spring-version}   org.springframework spring-context ${spring-version}   org.springframework spring-jdbc ${spring-version}   org.springframework spring-beans ${spring-version}   org.springframework spring-aop ${spring-version}   org.springframework spring-tx ${spring-version}   org.springframework spring-expression ${spring-version}   org.springframework spring-web ${spring-version} 

2.4. spring-security-config dan Lain-lain

Untuk menggunakan ruang nama dan anotasi Security Security XML yang kaya, kami memerlukan pergantungan konfigurasi spring-security :

 org.springframework.security spring-security-config ${spring-security.version} 

Akhirnya, sokongan LDAP, ACL, CAS, OAuth dan OpenID mempunyai kebergantungan mereka sendiri dalam Spring Security: spring-security-ldap , spring-security-acl , spring-security-cas, spring-security-oauth dan spring-security-openid .

2.5. spring-boot-starter-security

Semasa bekerja dengan Spring Boot, spring-boot-starter-security starter secara automatik akan merangkumi semua pergantungan seperti spring-security-core , spring-security-web dan spring-security-config antara lain:

 org.springframework.boot spring-boot-starter-security 2.3.3.RELEASE  

Oleh kerana Spring Boot akan menguruskan semua kebergantungan secara automatik untuk kami, ini juga akan menghilangkan masalah keselamatan musim bunga dan kebergantungan teras yang disebutkan sebelumnya.

3. Menggunakan Gambar dan Tonggak Tahap

Tonggak keselamatan Spring, serta gambar, boleh didapati di repositori Maven khusus yang disediakan oleh Spring. Untuk butiran tambahan mengenai cara mengkonfigurasi ini, lihat cara menggunakan Snapshots dan Milestones.

4. Kesimpulan

Dalam tutorial ringkas ini, kami membincangkan butiran praktikal penggunaan Spring Security dengan Maven . Pergantungan Maven yang disajikan di sini tentu saja merupakan yang utama, dan ada beberapa yang lain yang mungkin perlu disebut dan belum membuat pemotongan. Walaupun begitu, ini harus menjadi titik permulaan yang baik untuk menggunakan projek Spring in a Maven.