#spring #properties #spring-security
#spring #свойства #spring-безопасность
Вопрос:
Я хотел бы сопоставить настройку порта моего ldapserver со свойством в моем файле свойств. Но когда я использую ${ldapserverport}
, чем я получаю ошибку:
«Значение ‘${ldapserverport}’ атрибута ‘port’ для элемента ‘ldap-server’ недопустимо в отношении его типа ‘positiveInteger'».
Можно ли каким-либо образом использовать это свойство? Остальные свойства работают идеально.
мой код:
<ldap-server id="ldapServer" url="${ldapserverurl}"
port="${ldapserverport}"
manager-dn="${ldapserveruser}"
root="${ldapserverroot}"
manager-password="${ldapserverpassword}"/>
Комментарии:
1. Откуда
<ldap-server>
взялось? Это не определение компонента Spring.2. Почему вы не указываете порт в URL?
3. ldap-сервер является частью пространства имен spring-security. Он находится в отдельном XML-файле с этим пространством имен по умолчанию, поэтому в нем нет префикса. Я мог бы указать порт в URL, который решил бы эту конкретную проблему. Но я хотел бы знать, возможно ли, возможно, использовать свойства такого типа.
Ответ №1:
Это недостаток подхода «пользовательского пространства имен», используемого некоторыми стилями конфигурации Spring. Хотя это позволяет выражать конфигурации очень кратко, оно также очень специфично и автоматически не допускает никакой общей логики подстановки, используемой в <bean>
определениях стиля, включая заполнители свойств.
Если автор схемы ввел жестко установленное требование, чтобы данный атрибут был целым числом, то обойти это невозможно — автор схемы и код, который ее анализирует, должны были бы добавить явную поддержку заполнителей. В этом случае они этого не сделали.
Итак, если вы хотите использовать заполнители, вам придется «разбить» <ldap-server>
определение ярлыка на график базовых <bean>
определений. Это не всегда просто, поскольку в документах приходится объяснять, какие компоненты на самом деле определяются <ldap-server>
.
Комментарии:
1. Оке, это действительно сокращение. Спасибо за быстрый ответ, я попробую решение по добавлению порта в URL.
2. Я бы предложил подать JIRA. Люк и Роб хорошо справились с устранением подобных проблем с помощью замены заполнителя свойства.
Ответ №2:
<bean id="ldap-server" class="org.springframework.security.ldap.server.ApacheDSContainer">
<constructor-arg index="0" value="dc=test,dc=com"/>
<constructor-arg index="1" value="classpath:ldap_init.ldif"/>
<property name="port" value="${ldapserverport}"/>
</bean>
Могут потребоваться следующие зависимости
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-core</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-core-entry</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-protocol-ldap</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-protocol-shared</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-jndi</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.shared</groupId>
<artifactId>shared-ldap</artifactId>
<version>0.9.15</version>
</dependency>