Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > ACEGI Adapter Authentication Provider


Автор: Foo 19.5.2008, 15:55
Всем Привет. 
Мне необходимо реализовать в своем проекте Adapter Authentication Provider для ACEGI Security. На эту тему есть оффициальная документация 
http://acegisecurity.org/guide/springsecurity.html#ca.

Сделал по доке, но есть 1 ньюанс, они просят скопировать в томкат ряд jar-ок:
Цитата

Copy the following files into $CATALINA_HOME/common/lib:

    *

      aopalliance.jar
    *

      spring.jar
    *

      commons-codec.jar
    *

      burlap.jar
    *

      hessian.jar

None of the above JAR files (or acegi-security-XX.jar) should be in your application's WEB-INF/lib. The realm name indicated in your web.xml does not matter with Catalina.


Причем ни оной из этих jar файлов недолжно быть в самом приложении, но у меня приложение использует Spring. C помощью Spring я создаю бины, соответственно использую классы из своего приложения, а также hibernate классы и т.д. При запуске томката acegi нормально запускается, а потом начинатеся создание бинов внутри моего приложения, и тут начинаются проблемы ClassNotFoundException. Как можно решить это не вынося hibernate и остальные классы в томкат?

Автор: Zamuta 20.5.2008, 18:24
Foo, совсем не обязательно копировать эти либы в $CATALINA_HOME/common/lib, это делается если ты хочешь, чтобы они были доступны всем приложениям запущенным под этим томкатом, иначе же можешь держать нужные либы внутри приложения ( WEB-INF/lib/ ). Это единственная известная мне разница.

Автор: Foo 21.5.2008, 12:43
Дело в том, что мне необходимо вынести настройку acegi из приложения в томкат. Для этого я как и написано в документации копирую acegisequrity.xml в томкат/conf. Также я прописываю в server.xml что реалим нужно настраивать по этому файлу. Если я напимер скопирую spring.jar в свое приложение и в common/lib его небудет то я получу java.lang.NoClassDefFoundError: org/springframework/core/NestedRuntimeException в момент старта сервера. Может есть возможность сказать томкату чтобы он к своему класпасу добавил jar-ки из моего приложения? или ещё какието варианты.

Автор: Foo 21.5.2008, 14:02
может быть у кого нибудь есть хоть какойто пример использования Adapter Authentication Provider?  smile 

Автор: Zamuta 21.5.2008, 20:16
Foo, Adapter Authentication Provider это хорошо. Дело вот в чём. У томката есть своя система аутентификации/авторизации основанная на JAAS (http://jaasbook.com/) . В основе Acegi тоже лежит JAAS. С Acegi ты получаешь гибкость настройки и использования плюс ещё полезные модули. В твоём случае думаю нужно выбрать что-то одно.

Цитата

Container Adapters enable Acegi Security to integrate directly with the containers used to host end user applications. This integration means that applications can continue to leverage the authentication and authorization capabilities built into containers (such as isUserInRole() and form-based or basic authentication), whilst benefiting from the enhanced security interception capabilities provided by Acegi Security (it should be noted that Acegi Security also offers ContextHolderAwareRequestWrapper to deliver isUserInRole() and similar Servlet Specification compatibility methods).


Т.е. тот же isUserInRole() и похожие методы из спецификации сервлета реализованиы и в Acegi.

Автор: Foo 21.5.2008, 20:46
Ок, я попытаюсь описать что мне нужно сделать.

В своем приложении я использую спринг для создания бинов, также в спринге у меня конфигурируется acegi. Я описал там несколько провайдеров нужных мне - база данных, ин-мемори и др. Проблема в том, что конфиг в котором я описал провайдеры и AuthenticationManager находится внутри war фала. Мне нужно вынести это настройик из war файла, для чего я хочу использовать Container Adapter Authentication. Судя по документации, если я сделаю это, то смогу положить конфиг файл с настройками провайдеров кудато в томкат, также я пропишу в томкате реалм, который будет брать данный из acegi 
Код

 <Realm className="org.acegisecurity.adapters.catalina.CatalinaAcegiUserRealm"
             appContextLocation="conf/acegisecurity.xml"
             key="my_password" />

после чего в приложении я буду использовать AuthByAdapterProvider
Код

<bean id="authByAdapterProvider" class="org.acegisecurity.adapters.AuthByAdapterProvider">
  <property name="key"><value>my_password</value></property>
</bean>

и это решит мою проблему.

Покачто мне неудалось сделать это, както уж слишком поверхностно написано все в документации, может вы делали чтото подобное и можете расказать как это сделать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)