Acegi Security za jedan sat

Acegi Security generira ozbiljne pozitivne vijesti među Java Enterprise programerima, pa se možda pitate kako to funkcionira. U ovom članku ShriKant Vashishtha vodi vas kroz sve korake praktične implementacije Acegi Security. Prvo ćete postaviti usluge provjere autentičnosti i autorizacije temeljene na obrascima za web-aplikaciju utemeljenu na Javi, zatim ćete prilagoditi Acegi Security za dinamičku autorizaciju, kao i integraciju s vlastitim implementacijama provjere autentičnosti, kao što je LDAP.

Acegi Security je moćno i fleksibilno sigurnosno rješenje za Java poslovne programe izrađene pomoću Spring okvira. Ubrizgavanje ovisnosti na temelju opruge čini Acegi jednostavnim za konfiguriranje i primjenu na potpuno nenametljiv način. Ovo je blagodat za organizacije koje možda ne žele provoditi Spring Spring kao cjelinu, ali ipak trebaju učinkovitu sigurnost za višekratnu upotrebu za naslijeđene aplikacije.

Ovaj vam članak daje sažeti početak implementacije Acegi Security za osnovnu aplikaciju za obradu narudžbi. Za aplikaciju ćete postaviti usluge provjere autentičnosti i autorizacije, a te sigurnosne značajke implementirat ćete na web stranice utemeljene na obrascima. Nakon obrade primjera, za otprilike sat vremena trebali biste moći postaviti osnovnu sigurnost na temelju obrasca za bilo koju web-aplikaciju.

Nakon kratkog uvoda u primjer implementacije, naučit ćete o nekim načinima na koje možete prilagoditi sigurnost aplikacije pomoću Acegija. Vidjet ćete kako postaviti dinamičko autoriziranje temeljeno na ulozi na temelju baze podataka koja mapira korisničke uloge na URL-ove. Konačno, saznat ćete kako stvoriti prilagođenu implementaciju provjere autentičnosti Acegi Security koja se može integrirati s postojećim vlasničkim implementacijama provjere autentičnosti.

Postavljanje okoliša

Htio sam pokazati Acegijevu primjenjivost na širok spektar implementacija, ne samo na aplikacije temeljene na proljeću. Primjer aplikacije izradio sam pomoću JEE 5, s JavaServer Pages za prezentacijski sloj i SiteMesh za web izgled. Aplikacija se jednako lako može izraditi pomoću Struts 2, a infrastruktura Struts 2 već postoji u izvornom kodu, iako nije implementirana. Upotrijebio sam injekciju ovisnosti Spring kako bih implementirao Acegi sigurnost za aplikaciju. Pogledajte odjeljak Resursi za preuzimanje izvornog koda aplikacije. Slijedite ove korake za postavljanje aplikacijskog okruženja:

Korak 1. Preuzmite Acegi, Spring 2 i SiteMesh (veze potražite u Resursima).

Korak 2. Stvorite sljedeću strukturu mapa u Java projektu:

src - Sadrži Java izvorni kod

test - Sadrži test slučajeve

config - Bilo koja konfiguracijska datoteka svojstva / XML koja mora biti unutar puta predavanja

web - Sadrži web aplikaciju

|

decorators - Sadrži SiteMesh dekoratere

images - Sadrži slike, ako ih ima

scripts - JavaScript datoteke

styles - Kaskadni listovi stilova (CSS)

WEB-INF

|

jsp - Sadrži datoteke JavaServer Pages (JSP)

lib - Sadrži JAR-ove

Korak 3. Kopirajte sljedeće JAR datoteke u direktorij WEB-INF / lib:

  • acegi-security-1.0.5.jar - Osnovne klase sigurnosnog sustava Acegi
  • cglib-2.1.3.jar - Biblioteka za generiranje koda koju koristi Spring
  • commons-codec-1.3.jar - Koderi i dekoderi kao što su Base64, Hex, Fonetic i URL-ovi
  • commons-lang-2.1.jar- Pomoćni programi za java.langAPI-je
  • ehcache-1.2.3.jar - Koristi se u osnovne svrhe predmemoriranja
  • freemarker-2.3.8.jar - Koristi ih implementacija Struts
  • jstl.jar, standard.jar - Biblioteka oznaka JavaServer Pages Standard Tag Library (JSTL)
  • log4j-1.2.13.jar - Za sječu drva
  • ognl-2.6.11.jar - OGNL biblioteka koju koristi implementacija Struts
  • sitemesh-2.3.jar - SiteMesh JAR
  • spring.jar - Spring Framework JAR
  • struts2-core-2.0.8.jar - Podupirači 2 jezgre JAR
  • xwork-2.0.3.jar - Koristi ga Struts

Promjene u web.xml

Budući da se Acegi Security temelji na konceptu filtera i presretača servleta , morate dodati unose za FilterToBeanProxyfiltar u web.xmldeskriptor implementacije vaše aplikacije , kao što je prikazano na popisu 1.

Popis 1. Dodavanje filtera servleta u 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  ... 

FilterToBeanProxyzahtijeva parametar inicijalizacije, targetClass. targetClassParametar smješta prvi predmet naveden klase u aplikacijski kontekst. U konfiguraciji na popisu 1 ta je klasa org.acegisecurity.util.FilterChainProxy. Povezani bean objekt u kontekstu aplikacije je filterChainProxy, prikazan je na popisu 2.

Popis 2. filterChainProxy


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

Primijetite da Popis 1 definira više mapiranja filtra za Acegi filtar. Umjesto toga, mogli biste se izvući pomoću općenitijeg mapiranja filtra, kao što je prikazano u Popisu 3.

Popis 3. Općenito mapiranje filtra

 Acegi Filter Chain Proxy /* 

Međutim, ako koristite mapiranje filtra u Popisu 3, svaki URL presreće Acegi filter. A filtar sada zahtijeva detalje autorizacije i za statičke resurse (JavaScript, CSS, HTML i slike), koje možda ne želite osigurati. Ovu zamku možete izbjeći korištenjem određenih uzoraka URL-a.

Redoslijed je bitan pri postavljanju filtera za servlet. Budući da se u primjeru aplikacije koriste filtri za Acegi, JSP i SiteMesh, prvo morate postaviti Acegi filtar, a zatim JSP i SiteMesh filtri.