Programování

Zabezpečení Acegi za hodinu

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 Acegi
  • cglib-2.1.3.jar - Knihovna pro generování kódu používaná Springem
  • commons-codec-1.3.jar - Kodéry a dekodéry, jako jsou Base64, Hex, Fonetické a URL
  • commons-lang-2.1.jar - Pomocné nástroje pro Windows java.lang API
  • ehcache-1.2.3.jar - Používá se pro základní účely ukládání do mezipaměti
  • freemarker-2.3.8.jar - Používá se při implementaci Struts
  • jstl.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í Struts
  • sitemesh-2.3.jar - SiteMesh JAR
  • jaro.jar - Jarní rámec JAR
  • struts2-core-2.0.8.jar - Struts 2 jádrový JAR
  • xwork-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.

$config[zx-auto] not found$config[zx-overlay] not found