nous souhaitons faire ceci :1) identifier l'utilisateur...

cancel
Showing results for 
Search instead for 
Did you mean: 
unknown-user
Active Member

nous souhaitons faire ceci :1) identifier l'utilisateur...

nous souhaitons faire ceci :
1) identifier l'utilisateur dans LDAP avec le nom d'utilisateur stocké dans la base LDAP sous forme d'attribut unique ;
2) synchroniser au moment du login (après identification !) les données de l'utilisateur dans LDAP avec celles dans alfresco ;

1 - le 1er problème est réglé: cf.  http://forum.alfresco-fr.org/viewtopic.php?id=335

2 - maintenant la synchronisation… 
Pour faire simple, je veux utiliser les fonctionnalités d'import fournies dans alfresco.
Comme par ailleurs je veux limiter le nombre de classes modifiées, j'ajoute des attributs dans la classe LDAPAuthenticationComponentImpl déjà modifiée en (1).  Voici les attributs dont j'ai besoin :
 
    private ExportSourceImporter exportSourceImporter ;  // pour importer le fichier xml
    private LDAPPersonExportSource exportSource; // pour produire un fichier xml uniquement sur l'utilisateur identifié
    private PersonService personService;  // pour le debug
Et voici le changement de code de la méthode authenticate():
  //… code to authenticate user et load ldap user's data (cn, givenName, …)
  // do the synchro for this user only
  exportSource.setPersonQuery("uid=" + userName);
  exportSourceImporter.setClearAllChildren(false);
  exportSourceImporter.doImport();
  logger.debug("user '" + cn + "' imported.");               
  if (personService.personExists(userName)) logger.debug("user exists after; id=" + personService.getPerson(userName).getId() );
Quand je me logue avec un login LDAP, par ex. "bernard",je vois dans le journal que l'import a réussi.
Le fichier ExportSourceImporter-19981.xml ressemble à:
<?xml version="1.0" encoding="UTF-8"?>
<view:view xmlns: …………….  xmlns="">
   <cm:person view:childName="cm:person">
      <cm:ownable></cm:ownable>
      <cm:owner>bernard</cm:owner>
      <cm:userName>bernard</cm:userName>
      <cm:firstName>beber</cm:firstName>
      <cm:lastName>Beber</cm:lastName>
      <cm:email>beber@ipsp.ucl.ac.be</cm:email>
<cm:organizationId>123</cm:organizationId>
<cm:homeFolderProvider>personalHomeFolderProvider</cm:homeFolderProvider>
      <sys:node-uuid>c77ef628-807f-11db-aae0-13020744cd5d</sys:node-uuid>
   </cm:person>
</view:view>
(la ligne <sys:node-uuid> apparaît après le 1er essai).
Mais la connexion dans Alfresco échoue avec l'erreur suivante:
javax.faces.FacesException: Error calling action method of component with id loginForm:submit
caused by:
javax.faces.el.EvaluationException: Exception while invoking expression #{LoginBean.login}
caused by:
net.sf.acegisecurity.AuthenticationCredentialsNotFoundException: A valid SecureContext was not provided in the RequestContext

Hide Details

javax.faces.FacesException: Error calling action method of component with id loginForm:submit
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:74)
at javax.faces.component.UICommand.broadcast(UICommand.java:106)
at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:105)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:86)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.faces.el.EvaluationException: Exception while invoking expression #{LoginBean.login}
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:153)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:63)
… 33 more
Caused by: net.sf.acegisecurity.AuthenticationCredentialsNotFoundException: A valid SecureContext was not provided in the RequestContext
at net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:477)
at net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:355)
at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:77)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:41)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.alfresco.repo.audit.AuditComponentImpl.auditImpl(AuditComponentImpl.java:210)
at org.alfresco.repo.audit.AuditComponentImpl.audit(AuditComponentImpl.java:156)
at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:61)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy21.getCurrentUserName(Unknown Source)
at org.alfresco.web.bean.LoginBean.login(LoginBean.java:291)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
… 34 more
Si je me connecte comme utilisateur "admin", et que je vais dans la gestion des utilisateur, je vois l'utilisateur "bernard" dans la liste des utilisateurs.
Néanmoins si je veux voir ses propriétés j'obtiens un autre message d'erreur:
javax.faces.el.EvaluationException: Exception while invoking expression #{NewUserWizard.startWizardForEdit} 
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:153)
at javax.faces.component.UICommand.broadcast(UICommand.java:86)
at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:105)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.alfresco.web.app.servlet.AdminAuthenticationFilter.doFilter(AdminAuthenticationFilter.java:72)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException
at org.alfresco.repo.domain.NodeKey.<init>(NodeKey.java:44)
at org.alfresco.repo.node.db.hibernate.HibernateNodeDaoServiceImpl.getNodeStatus(HibernateNodeDaoServiceImpl.java:314)
at org.alfresco.repo.node.db.hibernate.HibernateNodeDaoServiceImpl.getNode(HibernateNodeDaoServiceImpl.java:413)
at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:335)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.alfresco.repo.transaction.TransactionalDaoInterceptor.invoke(TransactionalDaoInterceptor.java:60)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy1.getNode(Unknown Source)
at org.alfresco.repo.node.db.DbNodeServiceImpl.exists(DbNodeServiceImpl.java:135)
at sun.reflect.GeneratedMethodAccessor153.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.alfresco.repo.service.StoreRedirectorProxyFactory$RedirectorInvocationHandler.invoke(StoreRedirectorProxyFactory.java:213)
at $Proxy2.exists(Unknown Source)
at sun.reflect.GeneratedMethodAccessor153.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:335)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:41)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.alfresco.repo.audit.AuditComponentImpl.auditImpl(AuditComponentImpl.java:210)
at org.alfresco.repo.audit.AuditComponentImpl.audit(AuditComponentImpl.java:156)
at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:61)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy14.exists(Unknown Source)
at org.alfresco.web.bean.wizard.NewUserWizard.populate(NewUserWizard.java:185)
at org.alfresco.web.bean.wizard.NewUserWizard.startWizardForEdit(NewUserWizard.java:582)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
… 36 more
Je fais alors ceci:
- Arrêter tomcat, éditer mon code source pour désactiver l'import, recompiler…. et relancer tomcat.
- me connecter en étant admin pour effacer l'utilisateur corrompu "bernard" puis me déconnecter
- me reconnecter en étant "bernard" pour créer automatiquement un utilisateur bernard "propre"  dans alfresco.

Ensuite
je réactive l'import dans mes sources,…, recompile, relance tomcat.
Constate que le login bernard ne fonctionne tjs pas, bien que l'import a soi-disant réussi.
Mais maintenant en me connectant comme admin,  je peux voir les propriétés de l'utilisateur bernard et effectivement constater que l'import s'est fait correctement.

Qui pourrait me dire pourquoi le login échoue et comment y remédier ??

On utilise OpenLDAP, tomcat and Alfresco version 1.4.0 (build-105) schema 21 (community)
Merci,
Bernard.
3 Replies
s_archambault
Member II

Re: nous souhaitons faire ceci :1) identifier l'utilisateur...

Bonsoir,

J'ai eu un problème qui ressemble un peu au tien, la solution (dans mon cas) a été la patience, en effet il faut un peu de temps au système pour intégrer le "nouvel utilisateur" (quelques minutes).

Je faisais comme toi je stoppais TomCat puis je le relançais et je me précipitais pour voir si mes modifications étaient les bonnes et le système n'avait pas le temps d'intégrer les modifs (dans mon cas des nouveaux utilisateurs et leur espace d'accueil).

Peut être es tu victime du même phénomène ?
unknown-user
Active Member

Re: nous souhaitons faire ceci :1) identifier l'utilisateur...

Non ce n'est pas un problème de délai dans mon cas.
j'ai fini par trouver que je tentais de mettre à jours les données de l'utilisateur courant en n'ayant pas les droits suffisants.
En appelant setSystemUserAsCurrentUser(); avant de faire l'import, j'ai eu un autre message d'erreur tout-à-fait différent (nullpointer) qui n'était plus du aux droits d'accès.

Ceci dit ça ne fonctionnait donc tjs pas. 
Sur les conseils d'un ingénieur alfresco j'utilise maintenant le "PersonService" pour écrire les données d'utilisateur importées depuis LDAP; ça marche à moitié: il me reste à pouvoir inscrire l'utilisateur dans les groupes.  Queqlu'un a-t-il déjà manipulé les groupes dans Alfresco et/ou utiliser le AuthorityService ? ?
Tout exemple serait le bienvenu.

Bernard.
unknown-user
Active Member

Re: nous souhaitons faire ceci :1) identifier l'utilisateur...

pas trop compliqué finalement:
String myRootGroup = authorityService.createAuthority(AuthorityType.GROUP, null , "groupe_racine") ; 
String subGroup1 = authorityService.createAuthority(AuthorityType.GROUP, myRootGroup , "sous-groupe1") ;
authorityService.addAuthority(subGroup1 ,userName) ;
pour que l'utilisateur avec le login userName se retrouve dans les deux groupes.

Bernard.