Keamanan Musim Semi dengan Maven

1. Ikhtisar

Dalam artikel ini, kami akan menjelaskan cara menyiapkan Keamanan Musim Semi dengan Maven dan membahas kasus penggunaan tertentu menggunakan dependensi Keamanan Musim Semi. Anda dapat menemukan rilis Keamanan Musim Semi terbaru di Maven Central.

Ini adalah tindak lanjut dari Spring sebelumnya dengan artikel Maven, jadi untuk dependensi Spring non-keamanan, itulah tempat untuk memulai.

2. Keamanan Musim Semi Dengan Maven

2.1. pegas-keamanan-inti

Dukungan Core Spring Security - spring-security-core - berisi fungsi otentikasi dan kontrol akses. Ketergantungan ini wajib disertakan untuk semua proyek yang menggunakan Keamanan Musim Semi.

Selain itu, pegas-keamanan-inti mendukung aplikasi mandiri (non-web), keamanan tingkat metode, dan JDBC:

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

Perhatikan bahwa Keamanan Musim Semi dan Musim Semi berada pada jadwal rilis yang berbeda , jadi tidak selalu ada kecocokan 1: 1 antara nomor versi.

Jika Anda bekerja dengan versi Spring yang lebih lama - yang juga sangat penting untuk dipahami adalah fakta bahwa, secara tidak sengaja, Spring Security 4.1.x tidak bergantung pada rilis Spring 4.1.x! Misalnya, ketika Spring Security 4.1.0 dirilis, framework inti Spring sudah ada di 4.2.x dan karenanya menyertakan versi tersebut sebagai dependensi kompilasi. Rencananya adalah untuk menyelaraskan dependensi ini lebih dekat di rilis mendatang - lihat JIRA ini untuk lebih jelasnya - tetapi untuk saat ini, ini memiliki implikasi praktis yang akan kita lihat selanjutnya.

2.2. web-keamanan-musim semi

Untuk menambahkan dukungan Web untuk Keamanan Musim Semi , kita memerlukan ketergantungan web-keamanan-musim semi :

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

Ini berisi filter dan infrastruktur keamanan web terkait yang memungkinkan kontrol akses URL di lingkungan Servlet.

2.3. Keamanan Pegas dan Masalah Ketergantungan Inti Pegas yang Lebih Tua

Ketergantungan baru ini juga menunjukkan masalah untuk grafik ketergantungan Maven. Seperti disebutkan di atas, stoples Keamanan Musim Semi tidak bergantung pada stoples inti Spring terbaru (tetapi pada versi sebelumnya). Ini dapat menyebabkan dependensi lama ini berada di atas classpath daripada artefak Spring 5.x yang lebih baru.

Untuk memahami mengapa ini terjadi, kita perlu melihat bagaimana Maven menyelesaikan konflik. Jika terjadi konflik versi, Maven akan memilih jar yang paling dekat dengan akar pohon. Misalnya, pegas-inti ditentukan oleh pegas-orm (dengan versi 5.0.0 .RELEASE ) tetapi juga oleh inti-keamanan-pegas (dengan versi 5.0.2.RELEASE ). Jadi dalam kedua kasus, spring-jdbc didefinisikan pada kedalaman 1 dari pom root proyek kami. Karena itu, akan menjadi masalah di mana urutan pegas-orm dan pegas-keamanan-inti didefinisikan di pom kita sendiri. Yang pertama akan diprioritaskan begitukita mungkin berakhir dengan salah satu versi di classpath kita .

Untuk mengatasi masalah ini, kita harus secara eksplisit mendefinisikan beberapa dependensi Spring di pom kita sendiri dan tidak bergantung pada mekanisme resolusi dependensi Maven implisit. Melakukan ini akan menempatkan ketergantungan tertentu itu pada kedalaman 0 dari pom kita (seperti yang didefinisikan dalam pom itu sendiri) sehingga akan diprioritaskan. Semua berikut ini termasuk dalam kategori yang sama dan semua perlu didefinisikan secara eksplisit, baik secara langsung atau, untuk proyek multi-modul, dalam elemen dependencyManagement dari induk:

 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 Lainnya

Untuk menggunakan namespace dan anotasi XML Spring Security yang kaya, kita memerlukan dependensi spring-security-config :

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

Terakhir, dukungan LDAP, ACL, CAS, OAuth, dan OpenID memiliki dependensinya sendiri di Spring Security: spring-security-ldap , spring-security-acl , spring-security-cas, spring-security-oauth, dan spring-security-openid .

2.5. pegas-boot-starter-keamanan

Saat bekerja dengan Spring Boot, starter spring-boot-starter-security secara otomatis akan menyertakan semua dependensi seperti spring-security-core , spring-security-web dan spring-security-config antara lain:

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

Karena Spring Boot akan mengelola semua dependensi secara otomatis untuk kita, ini juga akan menghilangkan keamanan pegas dan masalah dependensi inti yang lebih lama yang disebutkan sebelumnya.

3. Menggunakan Snapshots dan Milestone

Milestone Keamanan Musim Semi, serta snapshot, tersedia di repositori Maven kustom yang disediakan oleh Spring. Untuk detail tambahan tentang cara mengonfigurasinya, lihat cara menggunakan Snapshots dan Milestones.

4. Kesimpulan

Dalam tutorial singkat ini, kami membahas detail praktis penggunaan Spring Security dengan Maven . Dependensi Maven yang disajikan di sini tentu saja adalah beberapa yang utama, dan ada beberapa lainnya yang mungkin layak untuk disebutkan dan belum berhasil. Namun demikian, ini harus menjadi titik awal yang baik untuk menggunakan proyek yang mendukung Spring in a Maven.