Acegi Security dalam satu jam

Acegi Security telah menghasilkan beberapa berita positif yang serius di kalangan pembangun perusahaan Java, jadi anda mungkin tertanya-tanya bagaimana ia berfungsi. Dalam artikel ini, ShriKant Vashishtha membimbing anda melalui semua langkah pelaksanaan Acegi Security yang praktikal. Mula-mula anda akan menyediakan perkhidmatan pengesahan dan pengesahan berasaskan borang untuk aplikasi Web berasaskan Java, kemudian anda akan menyesuaikan Acegi Security untuk kebenaran dinamik, serta penyatuan dengan pelaksanaan pengesahan hak milik seperti LDAP.

Acegi Security adalah penyelesaian keselamatan yang kuat dan fleksibel untuk aplikasi perusahaan Java yang dibina menggunakan rangka Spring. Suntikan kebergantungan berasaskan musim bunga menjadikan Acegi mudah dikonfigurasi dan dilaksanakan dengan cara yang sangat tidak mengganggu. Ini adalah kebaikan bagi organisasi yang mungkin tidak ingin menerapkan kerangka Spring secara keseluruhan tetapi masih memerlukan keselamatan yang berkesan dan dapat digunakan kembali untuk aplikasi warisan.

Artikel ini memberi anda permulaan ringkas untuk melaksanakan Acegi Security untuk aplikasi pemprosesan pesanan asas. Anda akan menyediakan perkhidmatan pengesahan dan pengesahan untuk aplikasi, dan anda akan melaksanakan ciri keselamatan tersebut di halaman Web berasaskan borang. Setelah melalui contoh ini, anda seharusnya dapat mengatur keselamatan berasaskan bentuk asas untuk mana-mana aplikasi Web dalam masa satu jam.

Setelah pengenalan ringkas mengenai contoh pelaksanaan, Anda akan mempelajari beberapa cara untuk menyesuaikan keselamatan aplikasi menggunakan Acegi. Anda akan melihat cara menetapkan kebenaran berdasarkan peranan dinamik berdasarkan pangkalan data yang memetakan peranan pengguna ke URL. Akhirnya, anda akan mengetahui cara membuat pelaksanaan pengesahan Acegi Security khusus yang dapat disatukan dengan pelaksanaan pengesahan proprietari yang ada.

Persediaan persekitaran

Saya ingin menunjukkan kebolehlaksanaan Acegi untuk pelbagai pelaksanaan, bukan hanya aplikasi berasaskan Spring. Saya membina aplikasi contoh menggunakan JEE 5, dengan JavaServer Pages untuk lapisan persembahan dan susun atur SiteMesh untuk Web. Aplikasi ini dapat dibuat dengan mudah menggunakan Struts 2, dan infrastruktur Struts 2 sudah ada dalam kod sumber, walaupun tidak dilaksanakan. Saya menggunakan suntikan ketergantungan Spring untuk melaksanakan keselamatan Acegi untuk aplikasi tersebut. Lihat bahagian Sumber untuk memuat turun kod sumber aplikasi. Ikuti langkah-langkah ini untuk mengatur persekitaran aplikasi:

Langkah 1. Muat turun Acegi, Spring 2, dan SiteMesh (lihat Sumber untuk pautan muat turun).

Langkah 2. Buat struktur folder berikut dalam projek Java:

src - Mengandungi kod sumber Java

test - Mengandungi kes ujian

config - Sebarang fail konfigurasi harta / XML yang perlu ada di dalam classpath

web - Mengandungi aplikasi Web

|

decorators - Mengandungi penghias SiteMesh

images - Mengandungi gambar, jika ada

scripts - Fail JavaScript

styles - Helaian Gaya Cascading (CSS)

WEB-INF

|

jsp - Mengandungi fail JavaServer Pages (JSP)

lib - Mengandungi JAR

Langkah 3. Salin fail JAR berikut ke dalam direktori WEB-INF / lib:

  • acegi-security-1.0.5.jar - Kelas utama sistem Keselamatan Acegi
  • cglib-2.1.3.jar - Perpustakaan penjanaan kod yang digunakan oleh Spring
  • commons-codec-1.3.jar - Pengekod dan penyahkod seperti Base64, Hex, Phonetic, dan URL
  • commons-lang-2.1.jar- Utiliti pembantu untuk java.langAPI
  • ehcache-1.2.3.jar - Digunakan untuk tujuan cache asas
  • freemarker-2.3.8.jar - Digunakan oleh pelaksanaan Struts
  • jstl.jar, standard.jar - Pustaka tag JavaServer Pages Standard Tag Library (JSTL)
  • log4j-1.2.13.jar - Untuk pembalakan
  • ognl-2.6.11.jar - Perpustakaan OGNL yang digunakan oleh pelaksanaan Struts
  • sitemesh-2.3.jar - SiteMesh JAR
  • spring.jar - Jangka Rangka Musim Semi
  • struts2-core-2.0.8.jar - Strar 2 teras JAR
  • xwork-2.0.3.jar - Digunakan oleh Struts

Perubahan pada web.xml

Oleh kerana Acegi Security didasarkan pada konsep penapis servlet dan pemintas , anda perlu menambahkan entri untuk FilterToBeanProxypenapis tersebut ke web.xmlpenerangan penerapan aplikasi anda , seperti yang ditunjukkan dalam Penyenaraian 1.

Penyenaraian 1. Menambah saringan servlet ke web.xml

  AcegiTraining  contextConfigLocation /WEB-INF/applicationContext*.xml   Acegi Filter Chain Proxy  org.acegisecurity.util.FilterToBeanProxy   targetClass  org.acegisecurity.util.FilterChainProxy    ... ...  Acegi Filter Chain Proxy /j_acegi_security_check   Acegi Filter Chain Proxy /j_acegi_logout   Acegi Filter Chain Proxy *.action   Acegi Filter Chain Proxy *.jsp  ... 

FilterToBeanProxymemerlukan parameter pengawalan, targetClass. The targetClassparameter menempatkan objek pertama dalam kelas yang ditetapkan dalam konteks permohonan. Dalam konfigurasi dalam Penyenaraian 1, kelas itu org.acegisecurity.util.FilterChainProxy. Objek kacang terkait dalam konteks aplikasi adalah filterChainProxy, ditunjukkan dalam Penyenaraian 2.

Penyenaraian 2. filterChainProxy


    
     class="org.acegisecurity.util.FilterChainProxy"> ... 
    

Perhatikan bahawa Penyenaraian 1 menentukan beberapa pemetaan penapis untuk penapis Acegi. Sebagai gantinya, Anda dapat lolos menggunakan pemetaan penapis yang lebih umum, seperti yang ditunjukkan dalam Penyenaraian 3.

Penyenaraian 3. Pemetaan penapis umum

 Acegi Filter Chain Proxy /* 

Namun, jika anda menggunakan pemetaan penapis dalam Penyenaraian 3, setiap URL dipintas oleh penapis Acegi. Dan penapis sekarang meminta butiran kebenaran untuk sumber statik (JavaScript, CSS, HTML, dan gambar) juga, yang mungkin anda tidak mahu selamatkan. Anda boleh mengelakkan perangkap ini dengan menggunakan corak URL tertentu.

Urutan sangat mustahak semasa meletakkan penapis servlet. Kerana aplikasi contoh menggunakan penapis untuk Acegi, JSP, dan SiteMesh, anda perlu meletakkan penapis Acegi terlebih dahulu, diikuti oleh penapis JSP dan SiteMesh.