При настройке ресурсов, таких как источники данных или серверы FTP, мы можем поместить эту информацию о конфигурации в независимый файл внешнего атрибута и обратиться к элементам атрибута в файле атрибутов через заполнители, такие как $ {пользователь} и $ {пароль} в файле конфигурации Spring.
Эта конфигурация имеет два преимущества:
Spring предоставляет PropertyPlaceholderConfiger, который способен ссылаться на файлы внешних свойств при загрузке боба. Propertyplaceholderconfigurer реализует интерфейс BeanFactoryPostProcessorbean, так что это постпроцессор фабрики фабрики.
1 базовая цитата
1.1 Метод PropectyplaceholderCurefer (конфигурация XML)
Предположим, вам нужно определить источник данных в бобах:
<bean id = "dataSource" Dressome-method = "close" p: driverclassname = "com.mysql.jdbc.driver" p: url = "jdbc: mysql: //127.0.0.1: 3306/spring4" p: username = "root" p: password = "/"/>
Здесь имя класса драйвера, URL -адрес JDBC и имя пользователя базы данных и пароль записаны непосредственно в XML. Таким образом, если вам нужно изменить информацию о конфигурации базы данных во время развертывания, вам нужно сначала найти XML, а затем изменить ее, что неудобно.
Рекомендуется извлечь эту информацию в файл конфигурации, предполагая, что имя IS System.priperties:
DriverClassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/spring4username = rootpassword =
Атрибутный файл может определить несколько атрибутов, а формат каждого атрибута:属性名=属性值
Конфигурация пружины:
<!-Представьте файл внешних свойств-> <Bean P: location = "classPath: System.Properties" P: FileEncoding = "UTF-8"/> <!-Источник данных-> <Bean Id = "DataSource" Dresting Method = "Close" P: riverClassname = "$ {DriverClassName}" P: url = "$ {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url {url} P: username = "$ {username}" p: password = "$ {password}"/>После этой конфигурации нам нужно только обратить внимание на этот файл конфигурации только при развертывании.
PropertyplaceholderConfigurer Описание собственности следующим образом:
| свойство | иллюстрировать |
|---|---|
| расположение | Указывает путь к файлу свойств. |
| локации | Указывает путь к нескольким файлам атрибутов. |
| FileCeending | Формат кодирования файла. Если не указано, Spring будет использовать формат кодирования по умолчанию операционной системы для чтения содержимого файла. |
| Заказ | Если в файле конфигурации определены несколько PropertyplaceforeCrigurers, вы можете указать приоритетный заказ через это свойство. |
| PlaceholderPrefix | Суффикс заполнителей, по умолчанию $ {. |
| Placeholdersuffix | Префикс заполнителя, по умолчанию}. |
1.2.
Вы можете использовать пространство имен контекста для определения файла свойства, который является более элегантным, чем метод конфигурации PropertyplaceholderCurefirer.
<Контекст: Property Placeholder location = "classPath: System.Properties" File-Encoding = "UTF-8"/>
Хотя этот метод требует, чтобы свойство было зашифровано, или расширенные функции использования таблиц базы данных для сохранения информации о конфигурации, должен быть расширен класс PropertyPlace HolderConfigurer, а затем принят метод конфигурации бобов.
1.3 @Value Метод (на основе аннотации или конфигурации класса Java)
Аннотированные бобы могут автоматически вводить значения свойств в переменные элемента или методы бобов, аннотированных @Value.
@ComponentPublic Class CustomDataSource {@Value ("$ {DriverClassName}") private String DriverClassName; @Value ("$ {url}") частная строка URL; @Value ("$ {username}") private String username; @Value ("$ {пароль}") private String Password; // Опустить getter/setter}Класс, который аннотирует @configuration на основе самого класса Java, аннотирует @component, поэтому его справочный метод такой же, как и эталонный метод, основанный на конфигурации аннотации.
ПРИМЕЧАНИЕ. Во время использования убедитесь, что указанное значение атрибута существует в файле атрибута и типа совпадает, в противном случае будет исключено исключение.
2 Значение атрибута шифрования
Для получения нечувствительной информации атрибута разумно отображаться в простом тексте в файле атрибутов, но если информация о атрибуте является конфиденциальной информацией (например, имя пользователя базы данных и пароль и т. Д.), Рекомендуется сохранить ее в зашифрованном тексту. Потому что, если конфиденциальная информация хранится в Ciphertext, то любой, у кого есть разрешение на вход на сервер, может увидеть конфиденциальную информацию, которая повлияет на безопасность системы.
Для систем, которые требуют особенно высоких требований безопасности (банки, системы общественной безопасности и т. Д.), Эта конфиденциальная информация должна находиться только в руках нескольких конкретных сотрудников технического обслуживания. Поэтому нам нужно зашифровать эту информацию, а затем расшифровать файл после того, как контейнер для пружин считывает файл.
PropertyplaceholderConfigurer наследует от класса PlaceholderConfigerersUpport, который разрабатывает методы для преобразования свойств до их использования:
| метод | иллюстрировать |
|---|---|
| ConvertProperty (String PropertyName, String PropertyValue) | Когда каждое значение свойства загружается и считывается, этот метод вызывается для его преобразования. |
| String convertPropertyValue (String riginalValue) | Это похоже на предыдущий метод, за исключением того, что параметры передаются только в значении атрибута. |
| void convertProperties (Properties reps) | Преобразовать все значения атрибутов. |
По умолчанию эти три являются пустыми методами. Мы можем расширить PropertyPlaceholderConfigurer, чтобы переопределить соответствующие методы преобразования, тем самым поддерживая зашифрованные файлы значения свойства.
2.1 класс инструмента шифрования и дешифрования DES
Шифрование информации делится на два способа: симметричные и асимметричные. Симметрично означает, что зашифрованная информация может быть расшифрована, в то время как асимметричный метод не может быть расшифрован в качестве исходного значения на основе зашифрованной информации. MD5 относится к асимметричному шифрованию, а DES принадлежит симметричному шифрованию. Итак, здесь мы используем DES, чтобы зашифровать значение атрибута; При чтении значения атрибута используйте DES, чтобы расшифровать его.
Пожалуйста, нажмите здесь, чтобы получить исходный код инструмента шифрования и дешифрования DES.
DES Инструкции по шифрованию и дешифрованию:
Мы используем инструмент DES Encryption и Decryption для шифрования учетной записи базы данных и пароля через командную строку; Затем напишите зашифрованную строку в system.properties, что следующее:
username = q5l+2pprspq = password = udyjsvkxc/q =
2.2 шифровать значение файла атрибута
Во -первых, настроить конфигуратор атрибута, который поддерживает преобразование дешифрования:
Public Class CustomPropertiplaceholderConfigurer Extends PropertyPlaceholderConfigurer { / *** des Key* / Private Static Final String Key_str = "123456"; / *** Значение зашифрованного имени свойства Группа*/ public Static Final String [] encrypt_property_names = new String [] {"username", "password"}; @Override Protected String ConvertProperty (String PropertyName, String PropertyValue) {if (! ISDECRYPT (PropertyName)) {return PropertyValue; } // Decrypt return new des (key_str) .decrypt (PropertyValue); } / ** * Необходимо ли расшифровать * * @param PropertyName PropertyName PropertyName * / Private Boolean ISdeCrypt (String PropertyName) {return arrayUtils.contains (encrypt_property_names, propertyname); }}Уведомление:
Затем настройте пользовательский файл атрибута через <Bean>:
<Bean P: location = "classPath: System.Properties" P: Fileencoding = "UTF-8"/>
Таким образом, пружинный контейнер может загрузить зашифрованные файлы атрибутов. Разве это не очень просто?
O (∩_∩) o ха -ха ~
3 Цитаты на себя
Spring позволяет ссылаться на значение атрибута через $ {propname} в определении бобов и позволяет использовать $ {propname} для реализации взаимных ссылок между атрибутами в файле свойств.
База данных = Spring4driverClassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/$ {база данных}Здесь значение другого атрибута (имя экземпляра базы данных) ссылается через $ {база данных}. Следовательно, для некоторых сложных свойств мы можем извлечь изменения в свойствах таким образом, чтобы минимизировать конфигурацию.
ПРИМЕЧАНИЕ. Если значение свойства слишком длинное, мы можем добавить «/» к концу каждой строки и разделить значение свойства на несколько строк, точно так же:
profile.jdbc.url = jdbc: mysql: //127.0.0.1: 3306/dbname? useunicode = true & haremencoding/= utf-8/& ZerodateTimebehavior = convertonull
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.