cancel
Showing results for 
Search instead for 
Did you mean: 

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

tcaiati
Champ in-the-making
Champ in-the-making
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  Smiley Very Happy

Bonne journée,
2 REPLIES 2

tcaiati
Champ in-the-making
Champ in-the-making
en fait, mes vraies rules sont :

    
<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.createAdminTaxon=ACL_NODE.0.sys:base.CreateChildren
               com.knowings.kmsj.repo.taxonomy.ITaxonService.createUserTaxon=ACL_NODE.0.sys:base.ReadChildren
               com.knowings.kmsj.repo.taxonomy.ITaxonService.validateTaxon=ACL_PARENT.0.sys:base.WriteProperties
               com.knowings.kmsj.repo.taxonomy.ITaxonService.deleteTaxon=ACL_NODE.0.sys:base.DeleteNode
               com.knowings.kmsj.repo.taxonomy.ITaxonService.getAvailableTaxons=AFTER_ACL_NODE.sys:base.ReadProperties
               com.knowings.kmsj.repo.taxonomy.ITaxonService.getTemporaryTaxons=AFTER_ACL_NODE.sys:base.ReadProperties
           </value>
        </property>
</bean>

Mais cela ne fonctionne pas mieux Smiley Sad … c'était pour préciser ma demander.

Merci,

tcaiati
Champ in-the-making
Champ in-the-making
Bonjour,

Finalement, on a trouvé la solution,  merci Philippe De RIVAROLA Smiley Very Happy

en fait, ITaxonService extends IResourceService
et IResourceService a 2 méthodes : getResource et getResources, il fallait donc les ajouter dans les règles :

com.knowings.kmsj.repo.taxonomy.ITaxonService.createAdminTaxon=ACL_NODE.0.sys:base.CreateChildren
com.knowings.kmsj.repo.taxonomy.ITaxonService.createUserTaxon=ACL_NODE.0.sys:base.ReadChildren
com.knowings.kmsj.repo.taxonomy.ITaxonService.validateTaxon=ACL_PARENT.0.sys:base.WriteProperties
com.knowings.kmsj.repo.taxonomy.ITaxonService.deleteTaxon=ACL_NODE.0.sys:base.DeleteNode
com.knowings.kmsj.repo.taxonomy.ITaxonService.getAvailableTaxons=AFTER_ACL_NODE.sys:base.ReadProperties
com.knowings.kmsj.repo.taxonomy.ITaxonService.getTemporaryTaxons=AFTER_ACL_NODE.sys:base.ReadProperties            com.knowings.kmsj.repo.parameter.IResourceService.getResource=ACL_NODE.1.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties
com.knowings.kmsj.repo.parameter.IResourceService.getResources=ACL_NODE.1.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties


et voilà,

Ce qui montre que si notre fichier de conf security est mal écrit, même si le serveur démarre, les services appelés risque de ne pas fonctionner et les messages d'erreurs ne sont pas clairs …

Bonne journée,