无法通过CMIS使用Alfresco上的新LDAP用户登录

时间:2017-12-13 11:45:52

标签: ldap mule alfresco cmis

我有一个在Java版本1.8.0-65上运行的Alfresco Enterprise版本5.1.2,它使用外部LDAP服务器(OpenLDAP)作为目录服务器。 Alfresco在启动时与LDAP服务器同步,并配置了同步设置Auto Create People On LoginSync Changes Only

当在LDAP服务器上创建新用户时,我尝试通过CMIS使用该用户登录时,我收到以下stacktrace的错误:

The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>java.lang.IllegalArgumentException: currentUser is a mandatory parameter
org.alfresco.util.ParameterCheck.mandatoryString(ParameterCheck.java:58)
org.alfresco.module.org_alfresco_module_rm.securitymarks.SecurityClearanceServiceImpl.isClearedFor(SecurityClearanceServiceImpl.java:120)
org.alfresco.module.org_alfresco_module_rm.securitymarks.permission.SecurityMarksPermissionPreProcessor.process(SecurityMarksPermissionPreProcessor.java:115)
org.alfresco.repo.security.permissions.impl.ExtendedPermissionServiceImpl.hasPermission(ExtendedPermissionServiceImpl.java:194)
org.alfresco.repo.security.person.PersonServiceImpl.personExists(PersonServiceImpl.java:530)
org.alfresco.repo.security.sync.ChainingUserRegistrySynchronizer.createMissingPerson(ChainingUserRegistrySynchronizer.java:862)
org.alfresco.repo.management.subsystems.SubsystemProxyFactory$1.invoke(SubsystemProxyFactory.java:79)
org.alfresco.repo.security.authentication.AbstractAuthenticationComponent$FixCurrentUserCallback$1.doWork(AbstractAuthenticationComponent.java:550)
org.alfresco.repo.security.authentication.AbstractAuthenticationComponent$FixCurrentUserCallback$1.doWork(AbstractAuthenticationComponent.java:1)
org.alfresco.repo.tenant.TenantUtil.runAsWork(TenantUtil.java:126)
org.alfresco.repo.tenant.TenantUtil.runAsTenant(TenantUtil.java:95)
org.alfresco.repo.tenant.TenantUtil$1.doWork(TenantUtil.java:69)
org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:555)
org.alfresco.repo.tenant.TenantUtil.runAsUserTenant(TenantUtil.java:65)
org.alfresco.repo.tenant.TenantUtil.runAsSystemTenant(TenantUtil.java:119)
org.alfresco.repo.security.authentication.AbstractAuthenticationComponent$FixCurrentUserCallback.execute(AbstractAuthenticationComponent.java:539)
org.alfresco.repo.security.authentication.AbstractAuthenticationComponent$FixCurrentUserCallback.execute(AbstractAuthenticationComponent.java:1)
org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:464)
org.alfresco.repo.security.authentication.AbstractAuthenticationComponent.setCurrentUser(AbstractAuthenticationComponent.java:234)
org.alfresco.repo.security.authentication.AbstractAuthenticationComponent.setCurrentUser(AbstractAuthenticationComponent.java:203)
org.alfresco.enterprise.repo.authorization.AuthorizationInterceptor.checkAuthorization(AuthorizationInterceptor.java:115)
org.alfresco.enterprise.repo.authorization.AuthorizationInterceptor.invoke(AuthorizationInterceptor.java:63)
org.alfresco.repo.security.authentication.AbstractChainingAuthenticationComponent.setCurrentUser(AbstractChainingAuthenticationComponent.java:188)
org.alfresco.repo.webdav.auth.BaseAuthenticationFilter.getSessionUser(BaseAuthenticationFilter.java:260)
org.alfresco.repo.webdav.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:121)
org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:132)
org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:89)
org.alfresco.web.app.servlet.CmisSecurityContextCleanerFilter.doFilter(CmisSecurityContextCleanerFilter.java:56)
org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:68)

为了更好的可读性,我从堆栈跟踪中省略了代理类和拦截器中的行。

同一个用户可以通过网络界面登录Alfresco,并且在随后尝试通过CMIS与同一用户访问Alfresco时,Alfresco会正确返回。

我已经分析了堆栈跟踪和可用的Alfresco源代码,最终它在org.alfresco.repo.security.authentication.AuthenticationUtil.getRunAsUser()处失败,返回null并且验证失败并显示currentUser is a mandatory parameter消息。

我的期望是,应该可以通过CMIS登录Alfresco,因为用户已经存在,并且可以通过Web界面在Alfresco上登录该用户。

我的问题是,是否有一些Alfresco设置应该更新才能使其工作,如果有其他参数应该设置为CMIS请求,或者根本不可能?

1 个答案:

答案 0 :(得分:0)

我无法在Linux上对OpenLDAP进行身份验证的Alfresco Community Edition 5.1.f上重现这一点。

测试步骤如下:

  1. 验证身份验证适用于LDAP用户。
  2. 验证Apache Chemistry CMIS Workbench可以使用LDAP用户进行身份验证。
  3. 将新用户添加到LDAP(tuser4)。
  4. 验证我可以通过新用户(tuser4)登录分享。
  5. 将另一个新用户添加到LDAP(tuser5)。
  6. 验证我可以使用新用户(tuser5)通过CMIS Workbench登录。
  7. 所有这些步骤都已通过。

    我在Workbench中使用的CMIS服务网址是:http://alfresco.local:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom

    确保你的匹配。这可能是个问题。

    如果您的服务网址匹配,请提供您用于获取会话的代码。