AnsweredAssumed Answered

Problème sur l'utilisation des intercepteurs de sécurité

Question asked by tcaiati on Feb 12, 2008
Latest reply on Feb 13, 2008 by tcaiati
Bonjour,

Voilà, j'essaye de mettre en place les intercepteurs de sécurité (comme dans le fichier "public-services-security-context.xml") pour nos propres services.

J'ai donc :

1- ajouter l'intercepteur dans le fichier "knowings-resource-services-context.xml" :

   <bean id="TaxonService"
      class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="proxyInterfaces">
         <list>
            <value>
               com.knowings.kmsj.repo.taxonomy.ITaxonService
            </value>
         </list>
      </property>
      <property name="target">
         <ref bean="taxonService" />
      </property>
      <property name="interceptorNames">
         <list>
            <idref local="ITaxonService_transaction" />
            <idref bean="AuditMethodInterceptor" />
            <idref bean="exceptionTranslator"/> 
            <idref bean="ITaxonService_security"/>
         </list>
      </property>
   </bean>

2- puis dans le fichier "knowings-resource-services-security-context.xml" :

    <bean id="ITaxonService_security" class="net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor" >
        <property name="authenticationManager"><ref bean="authenticationManager"/></property>
        <property name="accessDecisionManager"><ref bean="accessDecisionManager"/></property>
        <property name="afterInvocationManager"><ref bean="afterInvocationManager"/></property>
        <property name="objectDefinitionSource">
            <value>
               com.knowings.kmsj.repo.taxonomy.ITaxonService.getAvailableTaxons=ACL_ALLOW
               com.knowings.kmsj.repo.taxonomy.ITaxonService.getTemporaryTaxons=ACL_ALLOW
           </value>
        </property>
    </bean>
  

La conf est bien prise en compte car si je met volontairement une erreur (par exemple j'oublie de fermer une balise), le serveur ne démarre pas.

Le problème est le suivant :

Ce service appelle un autre service custom (pas de problème jusque là) mais ce dernier service appelle le NodeService (avec un grand N)
Et à ce moment, il met comme erreur :

exception : net.sf.acegisecurity.BadCredentialsException: Bad credentials presented
Bad credentials presented
net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider - authenticate - 290
net.sf.acegisecurity.providers.ProviderManager - doAuthentication - 159
net.sf.acegisecurity.AbstractAuthenticationManager - authenticate - 49
net.sf.acegisecurity.intercept.AbstractSecurityInterceptor - beforeInvocation - 372
net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor - invoke - 77
org.springframework.aop.framework.ReflectiveMethodInvocation - proceed - 176
org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor - invoke - 49
org.springframework.aop.framework.ReflectiveMethodInvocation - proceed - 176
org.alfresco.repo.audit.AuditComponentImpl - audit - 241
org.alfresco.repo.audit.AuditMethodInterceptor - invoke - 69
org.springframework.aop.framework.ReflectiveMethodInvocation - proceed - 176
org.springframework.transaction.interceptor.TransactionInterceptor - invoke - 107
org.springframework.aop.framework.ReflectiveMethodInvocation - proceed - 176
org.springframework.aop.framework.JdkDynamicAopProxy - invoke - 210

Tests :

Si je met "nodeService" (petit n), là ça passe, mais ce n'est pas la solution car il faut avoir le garde fou et en plus, l'application plante plus loin.

Si dans le fichier "knowings-resource-services-security-context.xml", au lieu de mettre les règles, je met :

    <!– to test it –>
      <bean id="ITaxonService_security" class="org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor"

là ça passe aussi jusqu'au bout (le "NodeService" fait son travail et ne m'affiche pas d'erreurs, avec un grand N).

=> je pense plutôt à un problème dans la déclaration des règles :
com.knowings.kmsj.repo.taxonomy.ITaxonService.getAvailableTaxons=ACL_ALLOW
               com.knowings.kmsj.repo.taxonomy.ITaxonService.getTemporaryTaxons=ACL_ALLOW

Avez-vous une idée ?
Je tourne en rond depuis plusieurs jours, toute idée est bien venue  :D

Bonne journée,

Outcomes