Programmering

Acegi Security på en time

Acegi Security har generert noen alvorlige positive summer blant Java-bedriftsutviklere, så du lurer kanskje på hvordan det fungerer. I denne artikkelen går ShriKant Vashishtha deg gjennom alle trinnene i en praktisk Acegi Security-implementering. Først konfigurerer du skjemabaserte autentiserings- og autorisasjonstjenester for et Java-basert webapplikasjon, deretter tilpasser du Acegi Security for dynamisk autorisasjon, samt integrasjon med proprietære autentiseringsimplementeringer som LDAP.

Acegi Security er en kraftig og fleksibel sikkerhetsløsning for Java-bedriftsapplikasjoner bygget med Spring-rammeverket. Vårbasert avhengighetsinjeksjon gjør Acegi enkel å konfigurere og implementere på en helt ikke-påtrengende måte. Dette er en velsignelse for organisasjoner som kanskje ikke ønsker å implementere Spring-rammeverket som helhet, men som fortsatt trenger effektiv, gjenbrukbar sikkerhet for eldre applikasjoner.

Denne artikkelen gir deg en kort start på å implementere Acegi Security for en grunnleggende ordrebehandlingsapplikasjon. Du setter opp autentiserings- og autorisasjonstjenester for applikasjonen, og du implementerer disse sikkerhetsfunksjonene på skjemabaserte websider. Etter å ha gjennomgått eksemplet, bør du kunne sette opp grunnleggende skjemabasert sikkerhet for alle webapplikasjoner på omtrent en time.

Etter en rask introduksjon til implementeringseksemplet vil du lære om noen av måtene du kan tilpasse applikasjonssikkerhet ved hjelp av Acegi. Du får se hvordan du konfigurerer dynamisk rollebasert autorisasjon basert på en database som tilordner brukerroller til URL-adresser. Til slutt vil du finne ut hvordan du lager en tilpasset Acegi Security-godkjenningsimplementering som kan integreres med eksisterende proprietære autentiseringsimplementeringer.

Miljøoppsett

Jeg ønsket å demonstrere Acegis anvendelighet på et bredt spekter av implementeringer, ikke bare vårbaserte applikasjoner. Jeg bygget applikasjonseksemplet ved hjelp av JEE 5, med JavaServer Pages for presentasjonslaget og SiteMesh for weblayout. Applikasjonen kan like gjerne bygges med Struts 2, og Struts 2-infrastrukturen er allerede på plass i kildekoden, men ikke implementert. Jeg brukte våravhengighetsinjeksjon for å implementere Acegi-sikkerhet for applikasjonen. Se Ressurser for å laste ned programkildekoden. Følg disse trinnene for å konfigurere applikasjonsmiljøet:

Trinn 1. Last ned Acegi, Spring 2 og SiteMesh (se Ressurser for nedlastingskoblinger).

Trinn 2. Opprett følgende mappestruktur i et Java-prosjekt:

src - Inneholder Java-kildekode

test - Inneholder testtilfeller

config - Enhver eiendom / XML-konfigurasjonsfil som må være inne i klassestien

nett - Inneholder webapplikasjonen

|

dekoratører - Inneholder SiteMesh-dekoratører

Bilder - Inneholder bilder, hvis noen

skript - JavaScript-filer

stiler - Cascading Style Sheets (CSS)

WEB-INF

|

jsp - Inneholder JavaServer Pages-filer (JSP)

lib - Inneholder JAR

Trinn 3. Kopier følgende JAR-filer til WEB-INF / lib-katalogen:

  • acegi-security-1.0.5.jar - Hovedklasser i Acegi Security-systemet
  • cglib-2.1.3.jar - Kodegenerasjonsbibliotek brukt av Spring
  • commons-codec-1.3.jar - Kodere og dekodere som Base64, Hex, Phonetic og URLs
  • commons-lang-2.1.jar - Hjelpeprogrammer for java.lang APIer
  • ehcache-1.2.3.jar - Brukes til grunnleggende hurtigbufring
  • freemarker-2.3.8.jar - Brukt av Struts-implementeringen
  • jstl.jar, standard.jar - JavaServer Pages Standard Tag Library (JSTL) tagbibliotek
  • log4j-1.2.13.jar - For logging
  • ognl-2.6.11.jar - OGNL-bibliotek brukt av Struts-implementeringen
  • sitemesh-2.3.jar - SiteMesh JAR
  • våren.jar - Spring Framework JAR
  • struts2-core-2.0.8.jar - Struts 2 core JAR
  • xwork-2.0.3.jar - Brukt av Struts

Endringer i web.xml

Fordi Acegi Security er basert på begrepet servletfiltre og avskjærere, må du legge til oppføringer for FilterToBeanProxy filter til applikasjonen din web.xml distribusjonsbeskrivelse, som vist i oppføring 1.

Oppføring 1. Legge til servletfiltre i 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_iSecurity_Acout Chain Proxy * .action Acegi Filter Chain Proxy * .jsp ... 

FilterToBeanProxy krever en initialiseringsparameter, targetClass. De targetClass parameteren lokaliserer det første objektet i den angitte klassen i applikasjonssammenheng. I konfigurasjonen i oppføring 1 er den klassen org.acegisecurity.util.FilterChainProxy. Det relaterte bønneobjektet i applikasjonssammenheng er filterChainProxy, vist i Oppføring 2.

Oppføring 2. filterChainProxy

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

Legg merke til at oppføring 1 definerer flere filtertilordninger for Acegi-filteret. Du kan i stedet komme unna med å bruke en mer generell filterkartlegging, som vist i Listing 3.

Oppføring 3. En generell filterkartlegging

 Acegi filterkjede proxy / * 

Imidlertid, hvis du bruker filterkartleggingen i Listing 3, blir hver URL oppfanget av Acegi-filteret. Og filteret ber nå om autorisasjonsdetaljer for statiske ressurser (JavaScript, CSS, HTML og bilder) også, som du kanskje ikke vil sikre. Du kan unngå denne fellen ved å bruke spesifikke URL-mønstre.

Bestilling er viktig når du legger servletfiltre. Fordi eksempelprogrammet bruker filtre for Acegi, JSP og SiteMesh, må du plassere Acegi-filteret først, etterfulgt av henholdsvis JSP og SiteMesh-filtrene.

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