Acegi Security за един час

Acegi Security генерира сериозен позитивен шум сред разработчиците на Java Enterprise, така че може би се чудите как работи. В тази статия ShriKant Vashishtha ще ви преведе през всички стъпки от практическото внедряване на Acegi Security. Първо ще настроите базирани на формуляр услуги за удостоверяване и упълномощаване за базирано на Java уеб приложение, след това ще персонализирате Acegi Security за динамично упълномощаване, както и интеграция с патентовани реализации за удостоверяване като LDAP.

Acegi Security е мощно и гъвкаво решение за сигурност за корпоративни приложения Java, изградено с помощта на Spring framework. Пролетното базирано впръскване на зависимостите прави Acegi лесен за конфигуриране и внедряване по напълно ненатрапчив начин. Това е благо за организациите, които може да не искат да внедрят рамката Spring като цяло, но все пак се нуждаят от ефективна, многократно използвана защита за наследени приложения.

Тази статия ви дава кратък старт към внедряването на Acegi Security за основно приложение за обработка на поръчки. Ще настроите услуги за удостоверяване и упълномощаване за приложението и ще внедрите тези функции за сигурност в базирани на формуляр уеб страници. След като приключите с примера, бихте могли да настроите базирана на формата защита за всяко уеб приложение за около час.

След кратко въведение в примера за внедряване ще научите за някои от начините, по които можете да персонализирате защитата на приложението, използвайки Acegi. Ще видите как да настроите динамично упълномощаване, базирано на роли, базирано на база данни, която съпоставя потребителските роли с URL адреси. И накрая, ще разберете как да създадете персонализирана реализация за удостоверяване на Acegi Security, която може да се интегрира със съществуващите собствени реализации за удостоверяване.

Настройка на околната среда

Исках да демонстрирам приложимостта на Acegi към широк спектър от внедрения, а не само към приложения, базирани на Spring. Създадох примерното приложение, използвайки JEE 5, с JavaServer Pages за презентационния слой и SiteMesh за уеб оформление. Приложението може също толкова лесно да бъде изградено с помощта на Struts 2 и инфраструктурата Struts 2 вече е налице в изходния код, макар и да не е приложена. Използвах инжектиране на пролетна зависимост, за да внедря защитата на Acegi за приложението. Вижте раздела Ресурси, за да изтеглите изходния код на приложението. Следвайте тези стъпки, за да настроите средата на приложението:

Стъпка 1. Изтеглете Acegi, Spring 2 и SiteMesh (вижте Ресурси за връзки за изтегляне).

Стъпка 2. Създайте следната структура на папките в проект на Java:

src - Съдържа изходен код на Java

test - Съдържа тестови случаи

config - Всяко свойство / XML конфигурационен файл, който трябва да бъде в пътя на класа

web - Съдържа уеб приложението

|

decorators - Съдържа декоратори на SiteMesh

images - Съдържа изображения, ако има такива

scripts - JavaScript файлове

styles - Каскадни таблици със стилове (CSS)

WEB-INF

|

jsp - Съдържа файлове на JavaServer Pages (JSP)

lib - Съдържа JAR

Стъпка 3. Копирайте следните JAR файлове в директорията WEB-INF / lib:

  • acegi-security-1.0.5.jar - Основни класове на системата Acegi Security
  • cglib-2.1.3.jar - Библиотека за генериране на код, използвана от Spring
  • commons-codec-1.3.jar - Кодери и декодери като Base64, Hex, Phonetic и URL адреси
  • commons-lang-2.1.jar- Помощни програми за java.langAPI
  • 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-ядрен JAR
  • xwork-2.0.3.jar - Използва се от Struts

Промени в web.xml

Тъй като Acegi Security се основава на концепцията за сървлетни филтри и прехващачи , трябва да добавите записи за FilterToBeanProxyфилтъра към web.xmlдескриптора за разполагане на вашето приложение , както е показано в листинг 1.

Листинг 1. Добавяне на филтри за сървлети към 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  ... 

FilterToBeanProxyизисква параметър за инициализация targetClass,. В targetClassпараметъра открива първият обект от съответния клас в контекста на приложението. В конфигурацията в Листинг 1 този клас е org.acegisecurity.util.FilterChainProxy. Свързаният обект на bean в контекста на приложението е filterChainProxyпоказан в листинг 2.

Листинг 2. filterChainProxy


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

Забележете, че Листинг 1 дефинира множество съпоставяния на филтри за филтъра Acegi. Вместо това можете да се измъкнете с използването на по-общо картографиране на карти, както е показано в листинг 3.

Листинг 3. Общо картографиране на филтъра

 Acegi Filter Chain Proxy /* 

Ако обаче използвате картографирането на филтъра в Листинг 3, всеки URL адрес се прихваща от филтъра Acegi. И филтърът сега изисква подробности за упълномощаване и за статични ресурси (JavaScript, CSS, HTML и изображения), които може да не искате да защитите. Можете да избегнете този капан, като използвате конкретни модели на URL адреси.

Редът е от съществено значение при поставянето на филтри за сървлети. Тъй като примерното приложение използва филтри за Acegi, JSP и SiteMesh, първо трябва да поставите филтъра Acegi, последван съответно от JSP и SiteMesh филтрите.