Настройте атрибут spring security ldap-server для использования другого URL-адреса в зависимости от развернутой среды.

Мы используем весеннюю безопасность, и она работает хорошо. Я пытаюсь выяснить одну неочевидную вещь: как настроить атрибут ldap-server для использования другого URL-адреса в зависимости от развернутой среды?

Вот что у меня работает:

<ldap-server url="ldap://testserver:port/o=blah" manager-dn="cn=bind,ou=Users,o=blah" manager-password="password"/>

<authentication-manager id="authenticationManager" alias="authenticationManager">
<ldap-authentication-provider            
    user-search-filter="(cn={0})"           
    user-search-base="ou=Users"           
    group-search-filter="(uniqueMember={0})"           
    group-search-base="ou=groups"           
    group-role-attribute="cn"           
    role-prefix="none">         
</ldap-authentication-provider>

Now, how do I configure it to use a different url based on deployed environment?

заранее спасибо, Шарат


person Sharath    schedule 09.08.2013    source источник
comment
Используйте PropertyPlaceholderConfigurer. См. static.springsource. org/spring/docs/3.2.x/   -  person Rob Winch    schedule 10.08.2013
comment
@RobWinch Спасибо за ответ. Для этого потребуется внешний файл свойств приложения, и мы ищем, чтобы сделать конфигурацию инкапсулированной внутри самого приложения. Какие-нибудь мысли? другие опции?   -  person Sharath    schedule 13.08.2013
comment
Я думаю, вам нужно расширить то, что вы ищете. Что вы подразумеваете под инкапсуляцией внутри самого приложения. Вы можете поместить файл свойств в приложение, если хотите, но тогда вы не сможете легко изменить его. Вместо использования файла свойств вы также можете использовать системные аргументы. Еще одна вещь, которую я сделал, это использовать PropertyPlaceHolderConfigurer с поиском JNDI в качестве значений.   -  person Rob Winch    schedule 13.08.2013
comment
@RobWinch Роб, мне нравится идея конфигуратора jndi, и я тоже пытался его реализовать. Проблема заключается в том, как заменить значение URL-адреса в 'ldap-server url=ldap://testserver:port/o=blah', поскольку это не свойство? В основном мне нужно, чтобы url в ‹ldap-server url=ldap://testserver:port/o=blah manager-dn=blah manager-password=password/› был динамическим в зависимости от развернутой среды. Я чувствую, что есть или должно быть что-то простое, чего мне не хватает, поскольку я чувствую, что это должно быть довольно распространенным вариантом использования.   -  person Sharath    schedule 13.08.2013
comment
@RobWinch Я нашел ваш ответ на другой пост ссылка и использовал эту информацию, чтобы сделать следующее, что сработало: Добавлена ​​запись в веб-сфере с varName и есть следующее в applicationContext-security xml: <jee:jndi-lookup jndi-name="cell/persistent/varName" id="ldapServerUrl" resource-ref="true" /> <ldap-server url="#{ldapServerUrl}" manager-dn="cn=blah" manager-password="blah"/> Спасибо за вашу помощь!   -  person Sharath    schedule 14.08.2013


Ответы (2)


Я сделал это с профилями Spring:

В вашем конфигурационном файле spring.*.xml используйте это в конце вашего файла:

<beans profile="production">
...
</beans>
<beans profile="local">
...
</beans>

В качестве аргументов VM необходимо указать используемый профиль: -Dspring.profiles.active=production

С Уважением

person Johann    schedule 07.10.2013

Вы можете использовать URL как переменные и установить их в файле свойств. Изменить файл свойств должно быть проще. Я знаю, что вы можете сделать это с Maven - с jar или плагином war в зависимости от упаковки, включая создание двух (или более) пакетов за одно выполнение - но я полагаю, что вы можете и с Ant или другими менеджерами.

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

person dtortola    schedule 29.08.2014