Programmering

Acegi Security på en time

Acegi Security har genereret nogle alvorlige positive brummer blandt Java-forretningsudviklere, så du undrer dig måske over, hvordan det fungerer. I denne artikel leder ShriKant Vashishtha dig gennem alle trin i en praktisk Acegi Security-implementering. Først opretter du formbaseret godkendelses- og autorisationstjenester til en Java-baseret webapplikation, derefter tilpasser du Acegi Security til dynamisk autorisation samt integration med proprietære godkendelsesimplementeringer som LDAP.

Acegi Security er en kraftfuld og fleksibel sikkerhedsløsning til Java-virksomhedsapplikationer, der er bygget ved hjælp af Spring-rammen. Fjederbaseret afhængighedsindsprøjtning gør Acegi let at konfigurere og implementere på en fuldstændig ikke-påtrængende måde. Dette er en velsignelse for organisationer, der måske ikke ønsker at implementere Spring-rammen som helhed, men som stadig har brug for effektiv, genanvendelig sikkerhed til ældre applikationer.

Denne artikel giver dig en kort start på implementeringen af ​​Acegi Security til en grundlæggende ordrebehandlingsapplikation. Du opretter godkendelses- og autorisationstjenester til applikationen, og du implementerer disse sikkerhedsfunktioner på formbaserede websider. Efter at have gennemgået eksemplet, skal du være i stand til at oprette grundlæggende formbaseret sikkerhed til enhver webapplikation på cirka en time.

Efter en hurtig introduktion til implementeringseksemplet lærer du om nogle af de måder, du kan tilpasse applikationssikkerhed ved hjælp af Acegi. Du får vist, hvordan du konfigurerer dynamisk rollebaseret godkendelse baseret på en database, der kortlægger brugerroller til URL'er. Endelig finder du ud af, hvordan du opretter en tilpasset Acegi Security-godkendelsesimplementering, der kan integreres med eksisterende proprietære godkendelsesimplementeringer.

Opsætning af miljø

Jeg ville demonstrere Acegis anvendelighed til en lang række implementeringer, ikke kun forårsbaserede applikationer. Jeg byggede applikationseksemplet ved hjælp af JEE 5 med JavaServer Pages til præsentationslaget og SiteMesh til weblayout. Applikationen kunne lige så let bygges ved hjælp af Struts 2, og Struts 2-infrastrukturen er allerede på plads i kildekoden, men ikke implementeret. Jeg brugte indsprøjtning af forårsafhængighed til at implementere Acegi-sikkerhed til applikationen. Se afsnittet Ressourcer for at downloade applikationens kildekode. Følg disse trin for at indstille applikationsmiljøet:

Trin 1. Download Acegi, Spring 2 og SiteMesh (se Ressourcer for downloadlink).

Trin 2. Opret følgende mappestruktur i et Java-projekt:

src - Indeholder Java-kildekode

prøve - Indeholder testcases

config - Enhver ejendom / XML-konfigurationsfil, der skal være inde i klassestien

web - Indeholder webapplikationen

|

dekoratører - Indeholder SiteMesh-dekoratører

billeder - Indeholder billeder, hvis nogen

scripts - JavaScript-filer

stilarter - Cascading Style Sheets (CSS)

WEB-INF

|

jsp - Indeholder JavaServer Pages-filer (JSP'er)

lib - Indeholder JAR'er

Trin 3. Kopier følgende JAR-filer til WEB-INF / lib-biblioteket:

  • acegi-security-1.0.5.jar - Hovedklasser i Acegi Security-systemet
  • cglib-2.1.3.jar - Kodegenerationsbibliotek brugt af Spring
  • commons-codec-1.3.jar - Kodere og dekodere som Base64, Hex, Fonetik og URL'er
  • commons-lang-2.1.jar - Hjælpeprogrammer til java.lang API'er
  • ehcache-1.2.3.jar - Anvendes til grundlæggende cache-formål
  • freemarker-2.3.8.jar - Brugt af Struts-implementeringen
  • jstl.jar, standard.jar - JavaServer Pages Standard Tag Library (JSTL) tagbibliotek
  • log4j-1.2.13.jar - Til logning
  • ognl-2.6.11.jar - OGNL-bibliotek brugt af Struts-implementeringen
  • sitemesh-2.3.jar - SiteMesh JAR
  • spring.jar - Spring Framework JAR
  • struts2-core-2.0.8.jar - Struts 2 core JAR
  • xwork-2.0.3.jar - Brugt af Struts

Ændringer til web.xml

Fordi Acegi Security er baseret på begrebet servletfiltre og opfangere, skal du tilføje poster til FilterToBeanProxy filter til din applikations web.xml implementeringsbeskrivelse, som vist i liste 1.

Fortegnelse 1. Tilføjelse af servletfiltre til web.xml

  AcegiTræningskontekstConfigLocation /WEB-INF/applicationContext*.xml Acegi Filter Chain Proxy org.acegisecurity.util.FilterToBeanProxy targetClass org.acegisecurity.util.FilterChainProxy ... ... Acegi Filter Chain Proxy / j_acegi_aceci_security_ Chain Proxy * .action Acegi Filter Chain Proxy * .jsp ... 

FilterToBeanProxy kræver en initialiseringsparameter, targetClass. Det targetClass parameter finder det første objekt i den angivne klasse i applikationskonteksten. I konfigurationen i liste 1 er denne klasse org.acegisecurity.util.FilterChainProxy. Det relaterede bønneobjekt i applikationskonteksten er filterKædeProxy, vist i liste 2.

Liste 2. filterKædeProxy

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

Bemærk, at liste 1 definerer flere filtertilknytninger til Acegi-filteret. Du kan i stedet slippe af med at bruge en mere generel filterkortlægning, som vist i liste 3.

Liste 3. En generel filtertilknytning

 Acegi Filter Chain Proxy / * 

Men hvis du bruger filtertilknytningen i lister 3, bliver hver eneste URL opfanget af Acegi-filteret. Og filteret anmoder nu også om godkendelsesoplysninger for statiske ressourcer (JavaScript, CSS, HTML og billeder), som du måske ikke vil sikre. Du kan undgå denne fælde ved at bruge specifikke URL-mønstre.

Bestilling er vigtig ved placering af servletfiltre. Da applikationseksemplet bruger filtre til Acegi, JSP og SiteMesh, skal du placere Acegi-filteret først efterfulgt af henholdsvis JSP og SiteMesh-filtre.