Acegi Security generuje mezi vývojáři podnikových prostředí Java několik vážných pozitivních zpráv, takže vás možná zajímá, jak to funguje. V tomto článku vás ShriKant Vashishtha provede všemi kroky praktické implementace zabezpečení Acegi. Nejprve nastavíte ověřovací a autorizační služby založené na formuláři pro webovou aplikaci založenou na jazyce Java, pak přizpůsobíte Acegi Security pro dynamickou autorizaci a integraci s vlastními implementacemi ověřování, jako je LDAP.
Acegi Security je výkonné a flexibilní bezpečnostní řešení pro podnikové aplikace Java vytvořené pomocí rámce Spring. Vkládání závislostí založené na pružině umožňuje Acegi snadno konfigurovat a implementovat zcela neintruzivním způsobem. Toto je požehnáním pro organizace, které možná nebudou chtít implementovat jarní framework jako celek, ale stále potřebují efektivní, opakovaně použitelné zabezpečení pro starší aplikace.
Tento článek poskytuje stručný úvod do implementace Acegi Security pro základní aplikaci pro zpracování objednávek. Nastavíte ověřovací a autorizační služby pro aplikaci a tyto funkce zabezpečení implementujete do webových stránek založených na formulářích. Po provedení příkladu byste měli být schopni nastavit základní zabezpečení založené na formuláři pro libovolnou webovou aplikaci asi za hodinu.
Po krátkém úvodu k příkladu implementace se dozvíte o některých způsobech, jak můžete přizpůsobit zabezpečení aplikace pomocí Acegi. Uvidíte, jak nastavit dynamickou autorizaci na základě rolí na základě databáze, která mapuje role uživatelů na adresy URL. Nakonec zjistíte, jak vytvořit vlastní implementaci ověřování zabezpečení Acegi, která se může integrovat s existujícími vlastními implementacemi ověřování.
Nastavení prostředí
Chtěl jsem demonstrovat použitelnost Acegi na širokou škálu implementací, nejen na jarní aplikace. Ukázkovou aplikaci jsem vytvořil pomocí JEE 5 s JavaServer Pages pro prezentační vrstvu a SiteMesh pro Web. Aplikaci lze stejně snadno vytvořit pomocí Struts 2 a infrastruktura Struts 2 je již ve zdrojovém kódu zavedena, i když není implementována. K implementaci zabezpečení Acegi pro aplikaci jsem použil Spring dependency injection. V sekci Zdroje si stáhněte zdrojový kód aplikace. Chcete-li nastavit prostředí aplikace, postupujte takto:
Krok 1. Stáhněte si Acegi, jaro 2 a SiteMesh (viz Zdroje pro odkazy ke stažení).
Krok 2. Vytvořte následující strukturu složek v projektu Java:
src
- Obsahuje zdrojový kód Java
test
- Obsahuje testovací případy
konfigurace
- Libovolný konfigurační soubor vlastností / XML, který musí být uvnitř cesty ke třídě
web
- Obsahuje webovou aplikaci|
dekoratéři
- Obsahuje dekoratéry SiteMesh
snímky
- Obsahuje obrázky, pokud existují
skripty
- Soubory JavaScript
styly
- Kaskádové styly (CSS)
WEB-INF
|
jsp
- Obsahuje soubory stránek JavaServer (JSP)
lib
- Obsahuje JAR
Krok 3. Zkopírujte následující soubory JAR do adresáře WEB-INF / lib:
acegi-security-1.0.5.jar
- Hlavní třídy bezpečnostního systému Acegicglib-2.1.3.jar
- Knihovna pro generování kódu používaná Springemcommons-codec-1.3.jar
- Kodéry a dekodéry, jako jsou Base64, Hex, Fonetické a URLcommons-lang-2.1.jar
- Pomocné nástroje pro Windowsjava.lang
APIehcache-1.2.3.jar
- Používá se pro základní účely ukládání do mezipamětifreemarker-2.3.8.jar
- Používá se při implementaci Strutsjstl.jar, standard.jar
- Knihovna značek JavaServer Pages Standard Tag Library (JSTL)log4j-1.2.13.jar
- Pro přihlášeníognl-2.6.11.jar
- Knihovna OGNL používaná implementací Strutssitemesh-2.3.jar
- SiteMesh JARjaro.jar
- Jarní rámec JARstruts2-core-2.0.8.jar
- Struts 2 jádrový JARxwork-2.0.3.jar
- Používá Struts
Změny v souboru web.xml
Protože Acegi Security je založen na konceptu servletové filtry a antirakety, musíte přidat položky pro FilterToBeanProxy
filtr do aplikace web.xml
deskriptor nasazení, jak je uvedeno v seznamu 1.
Výpis 1. Přidání filtrů servletů do souboru 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 Chain Proxy * .action Acegi Filter Chain Proxy * .jsp ...
FilterToBeanProxy
vyžaduje inicializační parametr, targetClass
. The targetClass
parametr vyhledá první objekt zadané třídy v kontextu aplikace. V konfiguraci v seznamu 1 je tato třída org.acegisecurity.util.FilterChainProxy
. Související objekt bean v kontextu aplikace je filterChainProxy
, zobrazené v seznamu 2.
Výpis 2. filterChainProxy
class = "org.acegisecurity.util.FilterChainProxy"> ...
Všimněte si, že Výpis 1 definuje více mapování filtrů pro filtr Acegi. Místo toho byste se mohli dostat pryč s použitím obecnějšího mapování filtrů, jak je uvedeno v seznamu 3.
Výpis 3. Obecné mapování filtrů
Acegi Filtr Chain Proxy / *
Pokud však použijete mapování filtrů v seznamu 3, je každá adresa URL zachycena filtrem Acegi. A filtr nyní požaduje podrobnosti autorizace také pro statické prostředky (JavaScript, CSS, HTML a obrázky), které možná nebudete chtít zabezpečit. Této pasti se můžete vyhnout pomocí konkrétních vzorů adres URL.
Při umisťování filtrů servletů je nezbytná objednávka. Protože ukázková aplikace používá filtry pro Acegi, JSP a SiteMesh, musíte nejprve umístit filtr Acegi a poté filtry JSP a SiteMesh.