Вы можете настроить конфигурацию Spring Security? - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть веб-приложение, которое уже работает с несколькими различными конфигурациями Spring Security. Тем не менее, эти различия конфигурации все настройки в моем файле конфигурации applicationContext. Поэтому, чтобы настроить их на сайте клиента, их необходимо изменить ВНУТРИ файла WAR. Если клиенты вручную изменят файл WAR, они потеряют свои изменения после повторного развертывания новой WAR.

Есть ли способ вывести эту конфигурацию наружу? Есть ли способ как-то загрузить конфигурацию, используя JNDI?

Ответы [ 6 ]

4 голосов
/ 27 сентября 2010

Это интересный вопрос. Поскольку Spring Security должен быть настроен в контексте корневого веб-приложения, вы не можете перенести его конфигурацию в другие контексты. Также вы не можете изменить набор ресурсов конфигурации из контекста. Итак, вы должны сделать это извне:

  • Вы можете использовать известное расположение файловой системы:

     <context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>
             /WEB-INF/applicationContext.xml
             file:///C:\config.xml
         </param-value>
     </context-param>
    
  • Свойства системы разрешены в contextConfigLocation, поэтому вы можете использовать его:

     <context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>
             /WEB-INF/applicationContext.xml
             file:///${configPath}
         </param-value>
     </context-param>
    

    и -DconfigPath=...

  • Вы можете переопределить XmlWebApplicationContext.getResource() и реализовать все, что захотите:

    public class MyXmlWebApplicationContext extends XmlWebApplicationContext {
        private static final String JNDI_PREFIX = "jndi:/";        
        @Override
        public Resource getResource(String location) {
            if (location.startsWith(JNDI_PREFIX)) return getJndiResource(location);
            else return super.getResource(location);
        }
        protected Resource getJndiResource(String location) { ... }
    }
    

    и

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
            jndi:/...
        </param-value>
    </context-param>        
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>com.example.MyXmlWebApplicationContext</param-value>
    </context-param>
    
0 голосов
/ 17 декабря 2012

Это зависит.Если вы хотите изменить авторизации, вы можете использовать Requestmap и сохранить все конфигурации авторизации в базе данных, а затем предоставить разные версии с определениями внешних данных начальной загрузки.

0 голосов
/ 12 декабря 2012

Spring поставляется с несколькими вариантами экстернализации Подробности конфигурации Spring в файлы свойств, которыми можно управлять вне развернутое приложение:

  1. Конфигураторы заполнителей свойства заменяют переменные-заполнители, размещенные в свойстве значения со значениями из внешнего файла свойств.
  2. Переопределения свойств переопределяют значения свойств компонента со значениями из внешнего файл свойств. Кроме того, проект с открытым исходным кодом Jasypt предлагает альтернативные реализации конфигуратора-заполнителя и переопределителя свойств S pring, которые могут извлекать эти значения из зашифрованных файлов свойств. Конфигуратор заполнителя может быть настроен так для classpath Конфигуратор заполнителя может быть настроен так же для filepath если db.properties содержит следующее jdbc.driverClassName = DriverclassName jdbc.url = Driverclass: // локальный / ApplicationName / jdbc.username = тест jdbc.password = test1 Теперь мы можем заменить жестко закодированные значения в конфигурации Spring переменными-заполнителями на основе свойств в db.properties
0 голосов
/ 22 марта 2012

Вот бесплатный инструмент конфигурации: http://go.eeye.com/icwt, который проверяет вашу среду на наличие настоятельно рекомендуемых обновлений конфигурации, настройку локальной ОС (определяет потенциальные проблемные области), идентифицирует области, касающиеся APT, и показывает, какие процессы и код подписан.

0 голосов
/ 27 сентября 2010

В качестве альтернативы вы можете использовать org.springmodules.commons.configuration.CommonsConfigurationFactoryBean для хранения и извлечения вашей конфигурации в качестве ключа, пары значений в таблице базы данных

    <bean name="DatabaseConfiguration" class="org.apache.commons.configuration.DatabaseConfiguration">
            <constructor-arg type="javax.sql.DataSource" ref="dataSource"/>
            <constructor-arg index="1" value="CONFIG_TABLE_NAME"/>
            <constructor-arg index="2" value="KEY_COLUMN_NAME"/>
            <constructor-arg index="3" value="VALUE_COLUMN_NAME"/>
    </bean>
0 голосов
/ 27 сентября 2010

Вы можете добавить org.springframework.beans.factory.config.PropertyPlaceholderConfigurer, который ссылается на внешний файл, а затем использовать синтаксис $ {key} без файлов конфигурации Spring для ссылки на пары ключ / значение в файле внешних свойств.

Другое решение - указать в вашем web.xml абсолютный путь для ссылки на Spring contextConfigLocation.

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/absolute_path/ldap.xml, /WEB-INF/context/dao-context.xml</param-value>
</context-param> 
...