Alfresco 在过滤器内部露天创建用户

Alfresco 在过滤器内部露天创建用户,alfresco,Alfresco,我正试图将两个部分粘在一起——一个用于登录用户的SSO过滤器和一个用于为用户创建主文件夹的主文件夹提供程序。每件作品本身都能正常工作。如果我只想让用户的主文件夹路径基于他们的用户名,那么它们可以正确地协同工作 然而,我感兴趣的是根据他们的用户名和姓氏来确定主文件夹路径。我可以通过cookie读取他们的姓氏,但我不确定在创建他们的主文件夹之前如何设置他们的姓氏 SSO过滤器只设置“X-Alfresco-Remote-User”标题。我注意到,如果用户不存在,Alfresco会创建一个具有所需用户名

我正试图将两个部分粘在一起——一个用于登录用户的SSO过滤器和一个用于为用户创建主文件夹的主文件夹提供程序。每件作品本身都能正常工作。如果我只想让用户的主文件夹路径基于他们的用户名,那么它们可以正确地协同工作

然而,我感兴趣的是根据他们的用户名和姓氏来确定主文件夹路径。我可以通过cookie读取他们的姓氏,但我不确定在创建他们的主文件夹之前如何设置他们的姓氏

SSO过滤器只设置“X-Alfresco-Remote-User”标题。我注意到,如果用户不存在,Alfresco会创建一个具有所需用户名的用户,但该用户的所有其他信息都是空白的。我不知道如何传递姓氏,所以我决定看看如果他们不存在,我是否可以在过滤器中创建一个用户。经过一些搜索,我找到了一个创建用户的示例,该用户看起来类似于:

ApplicationContext configurationApplicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
PersonService myPersonService = (PersonServiceImpl) configurationApplicationContext.getBean("personService");
if (myPersonService.personExists(remoteUser) == false) {
    HashMap<QName, Serializable> properties = new HashMap<QName, Serializable>();
    configurationApplicationContext.getBean("hashedUserHomesHomeFolderProvider");
    NodeRef userNodeRef = null; 
    properties.put(ContentModel.PROP_USERNAME, remoteUser);
    //properties.put(ContentModel.PROP_HOMEFOLDER, userNodeRef);//don't know what to use for userNodeRef
    properties.put(ContentModel.PROP_FIRSTNAME, "Test");
    properties.put(ContentModel.PROP_LASTNAME, "User");
    properties.put(ContentModel.PROP_EMAIL, "testUser@localhost.com");
    myPersonService.createPerson(properties);
}
ApplicationContext配置ApplicationContext=WebApplicationContextUtils.getWebApplicationContext(servletContext);
PersonService myPersonService=(PersonService MPL)配置应用程序上下文.getBean(“PersonService”);
if(myPersonService.personExists(remoteUser)==false){
HashMap属性=新建HashMap();
getBean(“HashEdUserHomeFolderProvider”);
NodeRef userNodeRef=null;
properties.put(ContentModel.PROP_用户名,remoteUser);
//properties.put(ContentModel.PROP_HOMEFOLDER,userNodeRef);//不知道userNodeRef使用什么
properties.put(ContentModel.PROP_FIRSTNAME,“Test”);
properties.put(ContentModel.PROP_LASTNAME,“User”);
properties.put(ContentModel.PROP_电子邮件,“testUser@localhost.com");
myPersonService.createPerson(属性);
}
当我尝试在过滤器中使用它时,会出现错误:

22:28:30267信息[site.servlet.ssAuthenticationFilter]SSAuthenticationFilter已初始化。 2012年3月6日晚上10:28:30 org.apache.catalina.core.StandardContext开始 严重:错误筛选器开始 2012年3月6日晚上10:28:30 org.apache.catalina.core.StandardContext开始 严重:由于以前的错误,上下文[/share]启动失败 2012年3月6日晚上10:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重:web应用程序创建了一个ThreadLocal,其密钥类型为[org.springframework.core.NamedThreadLocal](值[Prototype beans Current in creation]),值类型为[null](值[null]),但在web应用程序停止时未能将其删除。为防止内存泄漏,已强制删除ThreadLocal。 2012年3月6日晚上10:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重:web应用程序使用[null]类型的键(值[org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper]创建了ThreadLocal$1@464d02ee])和类型为[freemarker.template.DefaultObjectWrapper](值[freemarker.template)的值。DefaultObjectWrapper@69fb7b50])但在web应用程序停止时无法删除它。为防止内存泄漏,已强制删除ThreadLocal。 2012年3月6日晚上10:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重:web应用程序使用[null]类型的键(值[org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper]创建了ThreadLocal$1@7d5cf78b])和类型为[freemarker.template.DefaultObjectWrapper](值[freemarker.template)的值。DefaultObjectWrapper@628006f9])但在web应用程序停止时无法删除它。为防止内存泄漏,已强制删除ThreadLocal。 2012年3月6日晚上10:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重:web应用程序使用[null]类型的键(值[org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper]创建了ThreadLocal$1@4349f7f4])和类型为[freemarker.template.DefaultObjectWrapper](值[freemarker.template)的值。DefaultObjectWrapper@2d35d6af])但在web应用程序停止时无法删除它。为防止内存泄漏,已强制删除ThreadLocal。 2012年3月6日晚上10:28:30 org.apache.catalina.startup.HostConfig部署目录 信息:部署web应用程序目录根

我这样做对吗?如果过滤器中不存在用户,我是否应该创建用户?如果是,我做错了什么


如果这不是正确的方法,那么在创建主文件夹之前设置lastname的最佳解决方案是什么?

我认为关键点可能很严重:Error filterStart-日志中是否有关于您的过滤器出现问题的任何内容?此外,从错误日志中可以看出,这似乎发生在运行共享的服务器上(Context[/share]startup)-任何希望通过节点服务创建内容的内容都需要位于Alfresco Repo层,而不是共享层。我认为这是问题所在。在此之前没有任何错误。我尝试关闭httpServletRequest.getRequestURI().indexOf(“/Alfresco”)的筛选键==0,但这似乎不起作用。处理此问题的最佳方法是什么?