Lpad addon - ошибка при запуске

Добрый день.

Создаю новый проект. Добавляю в зависимости: com.haulmont.addon.ldap:ldap-global:1.1.0 Приложение собирается но не стартует.
Пробовал собирать на 6.9. и 6.9.1. Что-то делаю не так?

Сведения
2018-07-03 17:53:17.083 WARN  [localhost-startStop-1] com.haulmont.cuba.core.sys.CubaClassPathXmlApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'org.springframework.scheduling.config.CronTask#1' defined in null: Could not resolve placeholder 'ldap.expiringSessionNotificationCron' in value "${ldap.expiringSessionNotificationCron}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'ldap.expiringSessionNotificationCron' in value "${ldap.expiringSessionNotificationCron}"
2018-07-03 17:53:17.094 ERROR [localhost-startStop-1] com.haulmont.cuba.core.sys.AbstractWebAppContextLoader - Error initializing application
org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'org.springframework.scheduling.config.CronTask#1' defined in null: Could not resolve placeholder 'ldap.expiringSessionNotificationCron' in value "${ldap.expiringSessionNotificationCron}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'ldap.expiringSessionNotificationCron' in value "${ldap.expiringSessionNotificationCron}"
	at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:223) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:222) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:86) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:283) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:163) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at com.haulmont.cuba.core.sys.CubaClassPathXmlApplicationContext.<init>(CubaClassPathXmlApplicationContext.java:27) ~[cuba-global-6.9.1.jar:6.9.1]
	at com.haulmont.cuba.core.sys.AbstractAppContextLoader.createApplicationContext(AbstractAppContextLoader.java:90) ~[cuba-global-6.9.1.jar:6.9.1]
	at com.haulmont.cuba.core.sys.AbstractAppContextLoader.initAppContext(AbstractAppContextLoader.java:62) ~[cuba-global-6.9.1.jar:6.9.1]
	at com.haulmont.cuba.core.sys.AbstractWebAppContextLoader.contextInitialized(AbstractWebAppContextLoader.java:75) ~[cuba-global-6.9.1.jar:6.9.1]
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4745) [catalina.jar:8.5.23]
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207) [catalina.jar:8.5.23]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.5.23]
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) [catalina.jar:8.5.23]
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) [catalina.jar:8.5.23]
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) [catalina.jar:8.5.23]
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1144) [catalina.jar:8.5.23]
	at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1878) [catalina.jar:8.5.23]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_144]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_144]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_144]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_144]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'ldap.expiringSessionNotificationCron' in value "${ldap.expiringSessionNotificationCron}"
	at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) ~[spring-core-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer$PlaceholderResolvingStringValueResolver.resolveStringValue(PropertyPlaceholderConfigurer.java:258) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveStringValue(BeanDefinitionVisitor.java:282) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveValue(BeanDefinitionVisitor.java:209) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitIndexedArgumentValues(BeanDefinitionVisitor.java:150) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitBeanDefinition(BeanDefinitionVisitor.java:84) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:220) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
	... 25 common frames omitted

Ну в общем с этим вопросом отбой, наверное. Для старта необходимо прописать соответствующие настройки в конфигурационных файлах, о чем и написано на github.
Другое дело должен ли валиться проект проект при отсутствии этих настроек.

Подскажите, возможна ли настройка таким образом:

  1. Пользователи из разных доменов леса.
  2. Пользователей добавляем руками, т.е. без автоматического создания?

Добрый день.

Другое дело должен ли валиться проект проект при отсутствии этих настроек.

В дальнейшем дефолтные значения для основных настроек будут добавлены в компонент. После этого руками нужно будет добавлять только параметры подключения к ЛДАП.

Пользователи из разных доменов леса.

Изначально поиск пользователей будет происходить от корня указанного в параметре Base на вкладке Ldap Config. Также есть возможность задать дополнительный фильтр для поиска пользователей через свойство User Object Filter.

Пользователей добавляем руками, т.е. без автоматического создания?

Возможно. При ручном добавлении пользователей при логине будут обновляться данные у уже существующих пользователей.

Спасибо за ответ.

Будет еще несколько вопросов.

Правильно ли я понимаю, что для любого пользователя AD, который войдет в систему (подойдет по правилам), будет создан пользователь в системе и изменить я этого не могу? Могу только изменить правило обработки по умолчанию и добавить ему роль Anonimous?

Логин пользователя создается без домена. Как будут аутентифицироваться пользователи с одинаковым логином в разных доменах?
Судя по всему, автоматический вход не работает по этой же причине.

Да. При логине если пользователя нет в CUBA, но он есть в ЛДАП и пароль совпадает, в CUBA будет создан новый пользователь. Создание нового пользователя нельзя отключить.

В теории можно указать в качестве Login Attribute атрибут из ЛДАП который хранит комбинацию логин-домен.
И в поле логин при входе вводить значение логин-домен. Но при создании пользователя в CUBA возможно форматирование логина если он содержит некоторые символы, т.е. этот вариант может не пройти т.к. будет отличаться вводимый логин от логина созданного в CUBA.

Ну да. Я попробовал. С userPrincipalName работает. Но это не удобно. Имя там в формате user@domain.forest.com, а привычное domain\user. Да и браузер его видимо отдает в таком формате.
Решения нет?

Нужно дать возможность запретить обновление данных о пользователе при входе. Поскольку легко представляю себе ситуацию, что нужно изменить email у пользователя на “правильный” при “неправильном” в AD.

На данный момент нет.

Обязательно учтем. Спасибо.

Антон, а по этому вопросу прокомментируете что-то? Очень беспокоит.

Я правильно понял, что вы хотите вводить логин в формате domain\user и по нему в ЛДАП должен цепляться пользователь domain@user?

Наверное все же имели в виду user@domain. Во всяком случае в userPrincipalName он так хранится.

Я не уверен в правильности именно такой формулировки, поскольку есть полное имя домена (FQDN), которое включает в имена родительских доменов, а есть короткое - доменное имя. Именно FQDN хранится в userPrincipalName.
Мне бы хотелось, использовать доменное имя (короткое), как я описал выше.

Сейчас таким же образом работает аутентификация с помощью jespa. С ней работает и автоматический вход в браузере (я называю сквозная аутентификация, но не уверен, что правильно использую этот термин).
Поэтому есть надежда, что если пользователь будет в формате domain\user, то здесь этот тоже заработает.

Добрый день.

Нужно дать возможность запретить обновление данных о пользователе при входе. Поскольку легко представляю себе ситуацию, что нужно изменить email у пользователя на “правильный” при “неправильном” в AD.

Добавили такую возможность. Системное проперти называется ldap.synchronizeCommonInfoFromLdap

Имя там в формате user@domain.forest.com, а привычное domain\user. Да и браузер его видимо отдает в таком формате.
Решения нет?

На данный момент нет. Эту фичу добавили в следующий релиз.

1 симпатия

Антон, вопрос скорее всего не по адресу, но тем не менее.

Ссылку на marketplace не хотите добавить на русский сайт?

Михаил, добрый день.

В августе планируем разместить на русском сайте полностью переведенный маркетплейс.

1 симпатия

Михаил, здравствуйте!
Маркетплейс на русском сайте доступен по адресу https://www.cuba-platform.ru/marketplace.

2 симпатии

image

Перевели, но не полностью :slight_smile:

Не подскажете, когда этот релиз в планах?