Acegi Security dalam satu jam

Acegi Security telah menghasilkan desas-desus positif yang serius di antara pengembang perusahaan Java, jadi Anda mungkin bertanya-tanya bagaimana cara kerjanya. Dalam artikel ini, ShriKant Vashishtha memandu Anda melalui semua langkah penerapan Keamanan Acegi secara langsung. Pertama Anda akan mengatur layanan otentikasi dan otorisasi berbasis formulir untuk aplikasi Web berbasis Java, kemudian Anda akan menyesuaikan Keamanan Acegi untuk otorisasi dinamis, serta integrasi dengan implementasi otentikasi kepemilikan seperti LDAP.

Acegi Security adalah solusi keamanan yang kuat dan fleksibel untuk aplikasi perusahaan Java yang dibangun menggunakan kerangka kerja Spring. Injeksi ketergantungan berbasis pegas membuat Acegi mudah dikonfigurasi dan diterapkan dengan cara yang sepenuhnya tidak mengganggu. Ini adalah keuntungan bagi organisasi yang mungkin tidak ingin mengimplementasikan framework Spring secara keseluruhan tetapi masih membutuhkan keamanan yang efektif dan dapat digunakan kembali untuk aplikasi lama.

Artikel ini memberi Anda lompatan singkat untuk menerapkan Keamanan Acegi untuk aplikasi pemrosesan pesanan dasar. Anda akan menyiapkan layanan otentikasi dan otorisasi untuk aplikasi, dan Anda akan menerapkan fitur keamanan tersebut di halaman Web berbasis formulir. Setelah mengerjakan contoh, Anda harus dapat menyiapkan keamanan berbasis formulir dasar untuk aplikasi Web apa pun dalam waktu sekitar satu jam.

Mengikuti pengantar singkat untuk contoh implementasi, Anda akan belajar tentang beberapa cara Anda dapat menyesuaikan keamanan aplikasi menggunakan Acegi. Anda akan melihat cara menyiapkan otorisasi berbasis peran dinamis berdasarkan database yang memetakan peran pengguna ke URL. Terakhir, Anda akan mengetahui cara membuat implementasi otentikasi Keamanan Acegi khusus yang dapat diintegrasikan dengan implementasi otentikasi kepemilikan yang ada.

Pengaturan lingkungan

Saya ingin mendemonstrasikan penerapan Acegi pada berbagai implementasi, bukan hanya aplikasi berbasis Spring. Saya membangun aplikasi contoh menggunakan JEE 5, dengan JavaServer Pages untuk lapisan presentasi dan SiteMesh untuk tata letak Web. Aplikasi dapat dengan mudah dibangun menggunakan Struts 2, dan infrastruktur Struts 2 sudah ada di kode sumbernya, meskipun tidak diimplementasikan. Saya menggunakan injeksi ketergantungan Spring untuk mengimplementasikan keamanan Acegi untuk aplikasi. Lihat bagian Sumber Daya untuk mengunduh kode sumber aplikasi. Ikuti langkah-langkah berikut untuk menyiapkan lingkungan aplikasi:

Langkah 1. Unduh Acegi, Spring 2, dan SiteMesh (lihat Sumberdaya untuk tautan unduhan).

Langkah 2. Buat struktur folder berikut dalam proyek Java:

src - Berisi kode sumber Java

test - Berisi kasus uji

config - Semua file konfigurasi properti / XML yang perlu ada di dalam classpath

web - Berisi aplikasi Web

|

decorators - Berisi dekorator SiteMesh

images - Berisi gambar, jika ada

scripts - File JavaScript

styles - Cascading Style Sheets (CSS)

WEB-INF

|

jsp - Berisi file Halaman JavaServer (JSP)

lib - Berisi JAR

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

  • acegi-security-1.0.5.jar - Kelas utama dari sistem Keamanan Acegi
  • cglib-2.1.3.jar - Perpustakaan pembuat kode yang digunakan oleh Spring
  • commons-codec-1.3.jar - Pembuat enkode dan dekoder seperti Base64, Hex, Fonetik, dan URL
  • commons-lang-2.1.jar- Utilitas pembantu untuk java.langAPI
  • ehcache-1.2.3.jar - Digunakan untuk tujuan caching dasar
  • freemarker-2.3.8.jar - Digunakan oleh implementasi Struts
  • jstl.jar, standard.jar - Pustaka tag JavaServer Pages Standard Tag Library (JSTL)
  • log4j-1.2.13.jar - Untuk penebangan
  • ognl-2.6.11.jar - Pustaka OGNL yang digunakan oleh implementasi Struts
  • sitemesh-2.3.jar - SiteMesh JAR
  • spring.jar - JAR Kerangka Musim Semi
  • struts2-core-2.0.8.jar - Struts 2 core JAR
  • xwork-2.0.3.jar - Digunakan oleh Struts

Perubahan pada web.xml

Karena Acegi Security didasarkan pada konsep filter servlet dan interseptor , Anda perlu menambahkan entri untuk FilterToBeanProxyfilter ke web.xmldeskriptor penerapan aplikasi Anda , seperti yang ditunjukkan pada Daftar 1.

Kode 1. Menambahkan filter 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  ... 

FilterToBeanProxymembutuhkan parameter inisialisasi targetClass,. The targetClassparameter menempatkan objek pertama dari kelas ditentukan dalam konteks aplikasi. Dalam konfigurasi pada Listing 1, kelas tersebut adalah org.acegisecurity.util.FilterChainProxy. Objek kacang terkait dalam konteks aplikasi filterChainProxyditunjukkan pada Kode 2.

Daftar 2. filterChainProxy


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

Perhatikan bahwa Listing 1 mendefinisikan beberapa pemetaan filter untuk filter Acegi. Sebagai gantinya, Anda dapat menggunakan pemetaan filter yang lebih umum, seperti yang ditunjukkan pada Daftar 3.

Kode 3. Pemetaan filter umum

 Acegi Filter Chain Proxy /* 

Namun, jika Anda menggunakan pemetaan filter di Daftar 3, setiap URL dicegat oleh filter Acegi. Dan sekarang filter tersebut meminta detail otorisasi untuk sumber daya statis (JavaScript, CSS, HTML, dan gambar) juga, yang mungkin tidak ingin Anda amankan. Anda dapat menghindari jebakan ini dengan menggunakan pola URL tertentu.

Urutan sangat penting saat menempatkan filter servlet. Karena aplikasi contoh menggunakan filter untuk Acegi, JSP, dan SiteMesh, Anda perlu menempatkan filter Acegi terlebih dahulu, diikuti oleh filter JSP dan SiteMesh.