Προγραμματισμός

Acegi Security σε μία ώρα

Η Acegi Security δημιουργεί κάποια σοβαρή θετική φήμη μεταξύ των προγραμματιστών εταιρειών Java, οπότε ίσως αναρωτιέστε πώς λειτουργεί. Σε αυτό το άρθρο, η ShriKant Vashishtha σας καθοδηγεί σε όλα τα βήματα μιας πρακτικής εφαρμογής Acegi Security. Αρχικά θα ρυθμίσετε υπηρεσίες ελέγχου ταυτότητας και εξουσιοδότησης βάσει φόρμας για μια εφαρμογή Web που βασίζεται σε Java και, στη συνέχεια, θα προσαρμόσετε το Acegi Security για δυναμική εξουσιοδότηση, καθώς και ενοποίηση με ιδιόκτητες εφαρμογές ελέγχου ταυτότητας, όπως το LDAP.

Το Acegi Security είναι μια ισχυρή και ευέλικτη λύση ασφάλειας για εταιρικές εφαρμογές Java που έχουν δημιουργηθεί χρησιμοποιώντας το πλαίσιο Spring. Η έγχυση εξάρτησης με βάση την άνοιξη καθιστά το Acegi εύκολο στη διαμόρφωση και την εφαρμογή με εντελώς μη ενοχλητικό τρόπο. Αυτό είναι ένα όφελος για οργανισμούς που μπορεί να μην θέλουν να εφαρμόσουν το Spring πλαίσιο στο σύνολό τους, αλλά εξακολουθούν να χρειάζονται αποτελεσματική, επαναχρησιμοποιήσιμη ασφάλεια για εφαρμογές παλαιού τύπου.

Αυτό το άρθρο σάς δίνει μια συνοπτική αρχή για την εφαρμογή του Acegi Security για μια βασική εφαρμογή επεξεργασίας παραγγελιών. Θα ρυθμίσετε υπηρεσίες ελέγχου ταυτότητας και εξουσιοδότησης για την εφαρμογή και θα εφαρμόσετε αυτές τις δυνατότητες ασφαλείας σε ιστοσελίδες που βασίζονται σε φόρμα. Αφού επεξεργαστείτε το παράδειγμα, θα πρέπει να μπορείτε να ρυθμίσετε βασική ασφάλεια βάσει φόρμας για οποιαδήποτε εφαρμογή Web σε περίπου μία ώρα.

Μετά από μια γρήγορη εισαγωγή στο παράδειγμα εφαρμογής, θα μάθετε για μερικούς από τους τρόπους με τους οποίους μπορείτε να προσαρμόσετε την ασφάλεια εφαρμογών χρησιμοποιώντας το Acegi. Θα δείτε πώς μπορείτε να ρυθμίσετε δυναμική εξουσιοδότηση βάσει ρόλου με βάση μια βάση δεδομένων που αντιστοιχίζει ρόλους χρηστών σε διευθύνσεις URL. Τέλος, θα μάθετε πώς μπορείτε να δημιουργήσετε μια προσαρμοσμένη εφαρμογή ελέγχου ταυτότητας Acegi Security που μπορεί να ενσωματωθεί με υπάρχουσες ιδιόκτητες εφαρμογές ελέγχου ταυτότητας.

Ρύθμιση περιβάλλοντος

Ήθελα να αποδείξω τη δυνατότητα εφαρμογής του Acegi σε ένα ευρύ φάσμα εφαρμογών, όχι μόνο σε εφαρμογές που βασίζονται στην άνοιξη. Έφτιαξα το παράδειγμα εφαρμογής χρησιμοποιώντας το JEE 5, με JavaServer Pages για το επίπεδο παρουσίασης και SiteMesh για διάταξη Web. Η εφαρμογή θα μπορούσε εξίσου εύκολα να κατασκευαστεί χρησιμοποιώντας το Struts 2 και η υποδομή Struts 2 είναι ήδη στη θέση του στον πηγαίο κώδικα, αν και δεν έχει εφαρμοστεί. Χρησιμοποίησα το Spring dependency injection για να εφαρμόσω την ασφάλεια Acegi για την εφαρμογή. Ανατρέξτε στην ενότητα Πόροι για λήψη του πηγαίου κώδικα της εφαρμογής. Ακολουθήστε αυτά τα βήματα για να ρυθμίσετε το περιβάλλον εφαρμογής:

Βήμα 1. Λήψη Acegi, Spring 2 και SiteMesh (ανατρέξτε στην ενότητα Πόροι για συνδέσμους λήψης).

Βήμα 2. Δημιουργήστε την ακόλουθη δομή φακέλων σε ένα έργο Java:

src - Περιέχει πηγαίο κώδικα Java

δοκιμή - Περιέχει περιπτώσεις δοκιμών

διαμόρφωση - Οποιοδήποτε αρχείο διαμόρφωσης ιδιοτήτων / XML που πρέπει να βρίσκεται μέσα στο classpath

ιστός - Περιέχει την εφαρμογή Web

|

διακοσμητές - Περιέχει διακοσμητές SiteMesh

εικόνες - Περιέχει εικόνες, εάν υπάρχουν

σενάρια - Αρχεία JavaScript

στυλ - Cascading Style Sheets (CSS)

WEB-INF

|

jsp - Περιέχει αρχεία JavaServer Pages (JSP)

lib - Περιέχει βάζα

Βήμα 3. Αντιγράψτε τα ακόλουθα αρχεία JAR στον κατάλογο WEB-INF / lib:

  • acegi-security-1.0.5.jar - Κύριες τάξεις του συστήματος ασφάλειας Acegi
  • cglib-2.1.3.jar - Βιβλιοθήκη δημιουργίας κώδικα που χρησιμοποιείται από την Spring
  • commons-codec-1.3.jar - Κωδικοποιητές και αποκωδικοποιητές όπως Base64, Hex, Phonetic και URL
  • commons-lang-2.1.jar - Βοηθητικά βοηθητικά προγράμματα για java.lang API
  • ehcache-1.2.3.jar - Χρησιμοποιείται για βασικούς σκοπούς προσωρινής αποθήκευσης
  • freemarker-2.3.8.jar - Χρησιμοποιείται από την εφαρμογή Struts
  • jstl.jar, standard.jar - Βιβλιοθήκη ετικετών JavaServer Pages Standard Tag Library (JSTL)
  • log4j-1.2.13.jar - Για καταγραφή
  • ognl-2.6.11.jar - OGNL βιβλιοθήκη που χρησιμοποιείται από την εφαρμογή Struts
  • sitemesh-2.3.jar - SiteMesh JAR
  • spring.jar - Spring Framework JAR
  • struts2-core-2.0.8.jar - Βάσεις στήριξης 2 πυρήνων
  • xwork-2.0.3.jar - Χρησιμοποιείται από τον Struts

Αλλαγές στο web.xml

Επειδή το Acegi Security βασίζεται στην έννοια του φίλτρα servlet και αναχαιτιστές, πρέπει να προσθέσετε καταχωρήσεις για το FilterToBeanProxy φιλτράρετε στις εφαρμογές σας web.xml περιγραφέας ανάπτυξης, όπως φαίνεται στην καταχώριση 1.

Λίστα 1. Προσθήκη φίλτρων servlet στο 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_log Chain Proxy * .action Acegi Filter Chain Proxy * .jsp ... 

FilterToBeanProxy απαιτεί μια παράμετρο αρχικοποίησης, targetClass. ο targetClass Η παράμετρος εντοπίζει το πρώτο αντικείμενο της καθορισμένης κλάσης στο περιβάλλον εφαρμογής. Στη διαμόρφωση της λίστας 1, αυτή η κλάση είναι org.acegisecurity.util.FilterChainProxy. Το σχετικό αντικείμενο φασολιών στο περιβάλλον εφαρμογής είναι filterChainProxy, εμφανίζεται στην καταχώριση 2.

Λίστα 2. filterChainProxy

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

Σημειώστε ότι η Λίστα 1 ορίζει πολλαπλές αντιστοιχίσεις φίλτρων για το φίλτρο Acegi. Θα μπορούσατε αντ 'αυτού να ξεφύγετε χρησιμοποιώντας μια πιο γενική αντιστοίχιση φίλτρων, όπως φαίνεται στην καταχώριση 3.

Λίστα 3. Μια γενική χαρτογράφηση φίλτρων

 Μεσολάβηση αλυσίδας φίλτρου Acegi / * 

Ωστόσο, εάν χρησιμοποιείτε την αντιστοίχιση φίλτρου στην καταχώριση 3, κάθε URL παρακάμπτεται από το φίλτρο Acegi. Και το φίλτρο ζητά τώρα λεπτομέρειες εξουσιοδότησης για στατικούς πόρους (JavaScript, CSS, HTML και εικόνες), κάτι που ίσως δεν θέλετε να ασφαλίσετε. Μπορείτε να αποφύγετε αυτήν την παγίδα χρησιμοποιώντας συγκεκριμένα μοτίβα διευθύνσεων URL.

Η παραγγελία είναι απαραίτητη κατά την τοποθέτηση φίλτρων servlet. Επειδή η εφαρμογή παραδείγματος χρησιμοποιεί φίλτρα για Acegi, JSP και SiteMesh, πρέπει να τοποθετήσετε πρώτα το φίλτρο Acegi, ακολουθούμενο από τα φίλτρα JSP και SiteMesh, αντίστοιχα.