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


Автор: Dreamtraveler 24.12.2009, 16:14
Здравствуйте.
Создал недавно приложение с использованием некоторых возможносте Spring. 
Появился вопрос о безопасности. Попробовал realm'ы Tomcat такие как JDBC, JAAS. Работает замечательно.
Теперь хочу настроить Spring Security, конкретно JAAS, чтобы использовалась внутреняя безопасность приложения а не realm'ы 
Tomcat. 
Прочитал документацию По Java Authentication and Authorization Service (JAAS) Provider вроде показалось все легко. 
Но трудности все равно появились ))).
У меня просьба может кто-нибудь дать ссылку на хорошую информацию по данной теме или рассказать здесь как мне прикрутить 
данную безопасность к своему приложению или дать пример ))).
Некоторые вопросы:
1. У меня есть реализация Login Modul'я для realm'а Tomcat. Я могу использовать её для настройки Java Authentication and Authorization Service (JAAS) Provider'а следующим образом?(зеленый участок)
2. Правильно ли настроен красный участок
3. Как задать провайдера как в предпоследней строчке или как в голубом участке?


Код


<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"
  xmlns:beans="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              
            http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

     [color=red]<http auto-config="true" access-denied-page="/accessDenied.jsp">

        <intercept-url pattern="/plat.plt" access="user, admin"/>
        <intercept-url pattern="/rolvs.plt" access="admin"/>
        <intercept-url pattern="/use.plt" access="admin,nach"/>
        <intercept-url pattern="/Exit.plt" access="admin,nach,user"/> 

        <form-login
                login-page="/logins.jsp"
                default-target-url="/"
                authentication-failure-url="/loginError.html"/>

        <logout logout-url="/" logout-success-url="/index.jsp"/> 
      <!--  <concurrent-session-control  max-sessions="1" expired-url="/logins.jsp"/>-->

    </http>[/color]
 
   <!-- <beans:bean id="filterChainProxy"
        class="org.springframework.security.util.FilterChainProxy">
        <security:filter-chain-map path-type="ant">
            <security:filter-chain pattern="/**" filters="httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,basicProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor,switchUserProcessingFilter"/>
        </security:filter-chain-map>
    </beans:bean>-->
 
    [color=limegreen]<beans:bean id="jaasAuthenticationProvider"
            class="org.springframework.security.authentication.jaas.JaasAuthenticationProvider">
        <beans:property name="loginConfig" value="/WEB-INF/LoginAplication.config"/>
        <beans:property name="loginContextName" value="PlatsSprinForceWVer"/> 
        <beans:property name="callbackHandlers"> 
            <beans:list>
                <beans:bean class="org.springframework.security.authentication.jaas.JaasNameCallbackHandler"/>
                <beans:bean class="org.springframework.security.authentication.jaas.JaasPasswordCallbackHandler"/>
            </beans:list>
        </beans:property>
        <beans:property name="authorityGranters">
            <beans:list>
               <!-- <beans:bean class="org.springframework.security.authentication.jaas.TestAuthorityGranter"/>-->
             <beans:bean class="login.ReliseAuthorityGranter"/>
            </beans:list>
        </beans:property>
    </beans:bean> [/color]

  [color=blue] <!-- <beans:bean id="authenticationManager"
        class="org.springframework.security.authentication.ProviderManager">
        <beans:property name="providers">
            <beans:list>
               <beans:ref local="jaasAuthenticationProvider"/>
                <ref local="anonymousAuthenticationProvider"/>
                <ref local="rememberMeAuthenticationProvider"/>
           </beans:list>
        </beans:property>
        <beans:property name="sessionController" ref="concurrentSessionController"/>
    </beans:bean>-->
 
   <!-- <beans:bean id="concurrentSessionController"
        class="org.springframework.security.concurrent.ConcurrentSessionControllerImpl">
        <beans:property name="maximumSessions" value="1"/>
        <beans:property name="sessionRegistry">
            <beans:bean class="org.springframework.security.concurrent.SessionRegistryImpl"/>
        </beans:property>
    </beans:bean>-->

   <!-- <beans:bean id="concurrentSessionController"
        class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy ">
        <beans:property name="maximumSessions" value="1"/>-->
        <!--<beans:property name="sessionRegistry">
            <beans:bean class="org.springframework.security.core.session.SessionRegistryImpl"/>
        </beans:property>-->
   <!-- </beans:bean> -->[/color]
   
            <!--<authentication-provider user-service-ref="jaasAuthenticationProvider"/>-->
            
  </beans:beans>


Автор: MisterCleric 24.12.2009, 16:50
Привет. SpringSecurity для использования JAAS не юзал, но попробую поподсказывать.
Так вот:
1. В красном участке убери 
Цитата

auto-config="true"


2. concurrent-session-control на практике мне хватило только настройки внутри тега http. Но также можно и переопределить тот, что по дефолту примерно так:
Код

<beans:bean id="_concurrentSessionController"
                class="my.company.web.spring.security.MyConcurrentSessionControllerImpl"
                p:sessionRegistry-ref="_sessionRegistry"/>

и обратить внимание на ID этого бина. Большенство сервисов по дефолту в SpringSecurity  имеют ID с подчеркивание. И если ты его создаешь бинчик с таким же ID, то он перекроет тот, что подефолту. Для примера тут я использую бин по дефолту _sessionRegistry

3. authenticationManager можно и не создавать как бин. Он есть по дефолту. для того, что бы можно было использовать твой AuthenticationProvider достаточно его определить как бин в конфиге, что ты и сделал в зеленом блоке и пометить его как:
 <custom-authentication-provider/>

4. anonymous & rememberMe можно сконфигурить внутри http

5. Последняя строка ошибочная: AuthenticationProvider совсем не user-service...

Вроде все. Разбор полетов начинается...

Автор: Dreamtraveler 24.12.2009, 17:31
Спосибо буду пробовать....
И еще такой вопрос. 
Хочу использовать библиотеки:
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security/spring-security-3.0.xsd
Там похоже немного по другому синтаксис чем в 2.0. может так получится что в jar'ах может неоказатся нужных методов для обработки синтаксиса 3.0? 

Где можно почитать про http тег и его параметры?

Автор: MisterCleric 24.12.2009, 17:37
Цитата

про http тег 


Reference,который идет с дистрибутивом SpringSecurity.

О 3.0 : не должно такого быть...
Только вот вопрос: в каких jar'ах ?

Автор: Dreamtraveler 24.12.2009, 18:51
ага читаю теги...
jar'ы - как всегда конфликт библиотек.
То методов нет, то вообще классов. 
К примеру:
 <!-- <beans:bean id="concurrentSessionController"
        class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy ">
        <beans:property name="maximumSessions" value="1"/>-->
        <!--<beans:property name="sessionRegistry">
            <beans:bean class="org.springframework.security.core.session.SessionRegistryImpl"/>
        </beans:property>-->
   <!-- </beans:bean> -->

Вот на это он заявляет что нет метода setSessionRegistry, да его и правда нет. Значит я взял настройки из примера, кстати на спринговском сайте (что ж они его не обнавляют?), где такой метод был, да и вообще похоже такой бин нельзя создать потому что нет у него конструктор по умолчанию, кажись.

а на этот кусок:

<http auto-config="true" access-denied-page="/accessDenied.jsp">

        <intercept-url pattern="/plat.plt" access="user, admin"/>
        <intercept-url pattern="/rolvs.plt" access="admin"/>
        <intercept-url pattern="/use.plt" access="admin,nach"/>
        <intercept-url pattern="/Exit.plt" access="admin,nach,user"/> 

        <form-login
                login-page="/logins.jsp"
                default-target-url="/"
                authentication-failure-url="/loginError.html"/>

        <logout logout-url="/" logout-success-url="/index.jsp"/> 
      <!--  <concurrent-session-control  max-sessions="1" expired-url="/logins.jsp"/>-->

    </http>


 (Tomcat) он тоже ругается говорит что нет какого-то метода  парсера xml, чтобы что-то там прочесть. Вот такие вот дела пока грустные...

Автор: Dreamtraveler 25.12.2009, 20:31
Ну вот собстственно и все работа закончена!
Благодарю всех кто откликнулся! Добавил бы репутации , но что-то по правилам сто постов надо написать... 

Если у кого возникнут вопрсы по данной теме то пишите чем смогу помогу.

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