我有两件我试图粘在一起的东西 - 一个记录用户的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);
}
当我尝试在我的过滤器中使用它时出错:
22:28:30,267 INFO [site.servlet.SSOAuthenticationFilter] SSOAuthenticationFilter已初始化。 2012年3月6日下午10:28:30 org.apache.catalina.core.StandardContext start 严重:错误filterStart 2012年3月6日下午10:28:30 org.apache.catalina.core.StandardContext start 严重:由于先前的错误,上下文[/ share]启动失败 2012年3月6日下午10:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重:Web应用程序创建了一个ThreadLocal,其键为[org.springframework.core.NamedThreadLocal](值[原型bean当前正在创建])和值类型为[null](值[null])但未能将其删除当Web应用程序停止时。为防止内存泄漏,已强制删除ThreadLocal。 2012年3月6日下午10:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重:Web应用程序创建了一个ThreadLocal,其键为[null](值[org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper$1@464d02ee]),类型为[freemarker.template.DefaultObjectWrapper](值[freemarker.template.DefaultObjectWrapper@69fb7b50])但在Web应用程序停止时无法将其删除。为防止内存泄漏,已强制删除ThreadLocal。 2012年3月6日下午10:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重:Web应用程序创建了一个ThreadLocal,其键类型为[null](value [org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper$1@7d5cf78b]),类型为[freemarker.template.DefaultObjectWrapper](值[freemarker.template.DefaultObjectWrapper@628006f9])但在Web应用程序停止时无法将其删除。为防止内存泄漏,已强制删除ThreadLocal。 2012年3月6日下午10:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重:Web应用程序创建了一个ThreadLocal,其键类型为[null](value [org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper$1@4349f7f4]),类型为[freemarker.template.DefaultObjectWrapper](值[freemarker.template.DefaultObjectWrapper@2d35d6af])但在Web应用程序停止时无法将其删除。为防止内存泄漏,已强制删除ThreadLocal。 2012年3月6日下午10:28:30 org.apache.catalina.startup.HostConfig deployDirectory 信息:部署Web应用程序目录ROOT
我是以正确的方式来做这件事的吗?如果过滤器中不存在用户,我应该创建用户吗?如果是这样,我做错了什么?
如果这不是正确的方法,那么在创建主文件夹之前设置姓氏的最佳解决方案是什么?