У меня есть две части, которые я пытаюсь склеить: фильтр единого входа, который регистрирует пользователя, и поставщик домашних папок, который создает домашнюю папку для пользователя. Каждый кусок работает правильно самостоятельно. И они работают правильно вместе, если я просто хочу основать путь к домашней папке пользователя на его имени пользователя.
Однако я заинтересован в том, чтобы основывать путь к домашней папке на их имени пользователя и фамилии. Я могу прочитать их фамилию через cookie, но я не уверен, как установить их фамилию до создания их домашней папки.
Фильтр единого входа просто устанавливает заголовок «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 инициализирован.
6 марта 2012 г. 22:28:30 org.apache.catalina.core.StandardContext start
SEVERE: ошибка filterStart
6 марта 2012 г. 22:28:30 org.apache.catalina.core.StandardContext start
SEVERE: не удалось запустить Context [/ share] из-за предыдущих ошибок
6 марта 2012 г. 22:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: веб-приложение создало ThreadLocal с ключом типа [org.springframework.core.NamedThreadLocal] (значение [прототип bean-компонентов в настоящее время находится в процессе создания)) и значением типа [null] (значение [null]), но не удалось его удалить когда веб-приложение было остановлено. Чтобы предотвратить утечку памяти, ThreadLocal был принудительно удален.
6 марта 2012 г. 22:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: веб-приложение создало ThreadLocal с ключом типа [null] (значение [org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper$1@464d02ee]) и значением типа [freemarker.template.DefaultObjectWbW] [freemarker.template.DefaultObjectWrapper@69fb7b50]), но не удалось удалить его при остановке веб-приложения. Чтобы предотвратить утечку памяти, ThreadLocal был принудительно удален.
6 марта 2012 г. 22:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: веб-приложение создало ThreadLocal с ключом типа [null] (значение [org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper$1@7d5cf78b]) и значением типа [freemarker.template.DraaultOjectbject [freemarker.template.DefaultObjectWrapper@628006f9]), но не удалось удалить его при остановке веб-приложения. Чтобы предотвратить утечку памяти, ThreadLocal был принудительно удален.
6 марта 2012 г. 22:28:30 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: веб-приложение создало ThreadLocal с ключом типа [null] (значение [org.springframework.extensions.webscripts.processor.FTLTemplateProcessor$NonBlockingObjectWrapper$1@4349f7f4]) и значением типа [freemarker.template.DefaultOjectbject [freemarker.template.DefaultObjectWrapper@2d35d6af]), но не удалось удалить его при остановке веб-приложения. Чтобы предотвратить утечку памяти, ThreadLocal был принудительно удален.
6 марта 2012 г. 22:28:30 org.apache.catalina.startup.HostConfig deployDirectory
ИНФОРМАЦИЯ: Развертывание каталога веб-приложений ROOT
Правильно ли я поступаю? Должен ли я создавать пользователя, если он не существует в фильтре? Если так, что я делаю не так?
Если это неправильный подход, каким было бы наилучшее решение для установки фамилии перед созданием домашней папки?