Acegi Security generuje medzi vývojármi podnikových prostredí Java nejaké vážne pozitívne hlášky, takže by vás mohlo zaujímať, ako to funguje. V tomto článku vás ShriKant Vashishtha prevedie všetkými krokmi praktickej implementácie zabezpečenia Acegi Security. Najskôr nastavíte overovacie a autorizačné služby založené na formulároch pre webovú aplikáciu založenú na prostredí Java, potom prispôsobíte Acegi Security pre dynamickú autorizáciu, ako aj integráciu s vlastnými implementáciami autentifikácie, ako je LDAP.
Acegi Security je výkonné a flexibilné bezpečnostné riešenie pre podnikové aplikácie Java postavené na jarnom rámci. Vďaka jarnému vkladaniu závislostí je Acegi ľahko konfigurovateľný a implementovateľný úplne neintruzívnym spôsobom. Toto je prínos pre organizácie, ktoré by možno nechceli implementovať jarný rámec ako celok, ale stále potrebujú efektívne a opakovane použiteľné zabezpečenie pre staršie aplikácie.
Tento článok ponúka základné informácie o implementácii Acegi Security pre základnú aplikáciu na spracovanie objednávok. Nastavíte autentifikačné a autorizačné služby pre aplikáciu a tieto bezpečnostné funkcie implementujete do webových stránok založených na formulároch. Po vykonaní príkladu by ste mali byť schopní nastaviť základné zabezpečenie založené na formulároch pre každú webovú aplikáciu asi za hodinu.
Po krátkom úvode do príkladu implementácie sa dozviete o niektorých spôsoboch, ako môžete prispôsobiť zabezpečenie aplikácií pomocou Acegi. Uvidíte, ako nastaviť dynamickú autorizáciu na základe rolí na základe databázy, ktorá mapuje role používateľov na adresy URL. Nakoniec zistíte, ako vytvoriť vlastnú implementáciu autentifikácie Acegi Security, ktorú je možné integrovať s existujúcimi implementáciami autentifikácie autentifikácie.
Nastavenie prostredia
Chcel som demonštrovať použiteľnosť Acegi na širokú škálu implementácií, nielen na jarné aplikácie. Príkladnú aplikáciu som vytvoril pomocou nástroja JEE 5, pričom pre prezentačnú vrstvu boli použité stránky JavaServer Pages a rozloženie SiteMesh pre Web. Aplikáciu je možné rovnako ľahko vytvoriť pomocou Struts 2 a infraštruktúra Struts 2 je už v zdrojovom kóde zavedená, hoci nie je implementovaná. Na implementáciu zabezpečenia Acegi pre aplikáciu som použil Spring dependency injection. V časti Zdroje si môžete stiahnuť zdrojový kód aplikácie. Podľa týchto pokynov nastavíte prostredie aplikácie:
Krok 1. Stiahnite si Acegi, jar 2 a SiteMesh (odkazy na stiahnutie nájdete v časti Zdroje).
Krok 2. Vytvorte nasledujúcu štruktúru priečinkov v projekte Java:
src
- Obsahuje zdrojový kód Java
test
- Obsahuje testovacie prípady
konfigur
- Akýkoľvek konfiguračný súbor vlastnosti / XML, ktorý musí byť vo vnútri cesty triedy
web
- Obsahuje webovú aplikáciu|
dekoratérov
- Obsahuje dekoratéry SiteMesh
snímky
- Obsahuje obrázky, ak existujú
skriptov
- súbory JavaScript
štýly
- Kaskádové štýly (CSS)
WEB-INF
|
jsp
- Obsahuje súbory stránok JavaServer (JSP)
lib
- Obsahuje JAR
Krok 3. Skopírujte nasledujúce súbory JAR do adresára WEB-INF / lib:
acegi-security-1.0.5.jar
- Hlavné triedy bezpečnostného systému Acegicglib-2.1.3.jar
- Knižnica na generovanie kódu, ktorú používa Springcommons-codec-1.3.jar
- Kodéry a dekodéry, napríklad Base64, Hex, Fonetické a URLcommons-lang-2.1.jar
Pomocné programy pre Windowsjava.lang
APIehcache-1.2.3.jar
- Používa sa na základné účely ukladania do pamäte cachefreemarker-2.3.8.jar
- Používa sa pri implementácii Strutsjstl.jar, standard.jar
- Knižnica značiek štandardných knižníc značiek JavaServer Pages (JSTL)log4j-1.2.13.jar
- Na ťažbu drevaognl-2.6.11.jar
- Knižnica OGNL používaná implementáciou Strutssitemesh-2.3.jar
- SiteMesh JARjar.jar
- Jarný rámec JARstruts2-core-2.0.8.jar
- Vzpery 2 jadra JARxwork-2.0.3.jar
- Používa Struts
Zmeny v súbore web.xml
Pretože Acegi Security je založené na koncepte servletové filtre a interceptory, musíte pridať záznamy pre FilterToBeanProxy
filter na vašu aplikáciu web.xml
deskriptor nasadenia, ako je uvedené v zozname 1.
Zoznam 1. Pridanie filtrov servletu do súboru 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_secur_security_security Chain Proxy * .action Acegi Filter Chain Proxy * .jsp ...
FilterToBeanProxy
vyžaduje inicializačný parameter, targetClass
. The targetClass
parameter vyhľadá prvý objekt zadanej triedy v kontexte aplikácie. V konfigurácii v zozname 1 je táto trieda org.acegisecurity.util.FilterChainProxy
. Súvisiaci objekt bean v kontexte aplikácie je filterChainProxy
, zobrazené v zozname 2.
Zoznam 2. filterChainProxy
class = "org.acegisecurity.util.FilterChainProxy"> ...
Všimnite si, že Výpis 1 definuje viacnásobné mapovanie filtra pre filter Acegi. Namiesto toho by ste mohli uniknúť použitiu všeobecnejšieho mapovania filtra, ako je uvedené v zozname 3.
Zoznam 3. Všeobecné mapovanie filtra
Acegi Filter Chain Proxy / *
Ak však použijete mapovanie filtra v zozname 3, každú adresu URL zachytí Acegiho filter. A teraz filter vyžaduje podrobnosti autorizácie aj pre statické prostriedky (JavaScript, CSS, HTML a obrázky), ktoré možno nebudete chcieť zabezpečiť. Tejto pasci sa môžete vyhnúť použitím konkrétnych vzorov adries URL.
Pri umiestňovaní filtrov servletu je nevyhnutná objednávka. Pretože príkladová aplikácia používa filtre pre Acegi, JSP a SiteMesh, musíte najskôr umiestniť filter Acegi a až potom filtre JSP a SiteMesh.