Ao configurar recursos como fontes de dados ou servidores FTP, podemos colocar essas informações de configuração em um arquivo de atributo externo independente e consultar os itens de atributo no arquivo de atributo por meio de espaços reservados como $ {user} e $ {senha} no arquivo de configuração da primavera.
Esta configuração tem dois benefícios:
A Spring fornece um FigonFigurer de PropertyPlaceHoldConfigurer capaz de fazer referência a arquivos de propriedades externas ao carregar um feijão. PropertyPlaceHoldConfigurer implementa a interface BeanFactoryPostProcessorBean, por isso é um pós -processador de fábrica de feijão.
1 cotação básica
1.1 Método PropertyPlaceHoldConfigurer (Configuração XML)
Suponha que você precise definir uma fonte de dados no feijão:
<bean id = "DataSource" Destroy-Method = "Close" P: DriverClassName = "com.mysql.jdbc.driver" p: url = "jdbc: mysql: //127.0.0.1: 3306/spring4" p: username = "root" P: senha = "" "/>
Aqui, o nome da classe do driver, o URL JDBC e o nome de usuário e a senha do banco de dados são gravados diretamente no XML. Dessa forma, se você precisar alterar as informações de configuração do banco de dados durante a implantação, precisará primeiro encontrar o XML e modificá -las, o que é inconveniente.
Recomenda -se extrair essas informações para um arquivo de configuração, assumindo que o nome seja System.Pripties:
driverclassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/spring4UserName = rootpassword =
O arquivo de atributo pode definir vários atributos, e o formato de cada atributo é:属性名=属性值
Configuração da primavera:
<!-Introduzir Arquivo de propriedades externas-> <bean p: location = "ClassPath: System.properties" p: fileEncoding = "utf-8"/> <!-Fonte de dados-> <bean id = "DataSource" Method = "Close" P: DriverclassName = "$ {DriverclassName" " P: nome de usuário = "$ {nome de usuário}" p: senha = "$ {senha}"/>Após essa configuração, precisamos apenas prestar atenção a esse arquivo de configuração ao implantar.
A descrição da propriedade PropertyPlaceHoldConFigurer é a seguinte:
| propriedade | ilustrar |
|---|---|
| localização | Especifica o caminho para o arquivo de propriedade. |
| Locais | Especifica o caminho para vários arquivos de atributo. |
| FileEncoding | O formato de codificação do arquivo. Se não for especificado, o Spring usará o formato de codificação padrão do sistema operacional para ler o conteúdo do arquivo. |
| Ordem | Se vários PropertyPlaceHoldConFigers estiverem definidos no arquivo de configuração, você poderá especificar a ordem de prioridade através desta propriedade. |
| PlanteholderPrefix | Sufixo de espaço reservado, o padrão é $ {. |
| Espaço de espaço reservado | Prefixo de espaço reservado, o padrão é}. |
1.2 Contexto: Método Property-PlaceHoder (Configuração XML)
Você pode usar o espaço para nome de contexto para definir o arquivo de propriedade, que é mais elegante que o método de configuração do PropertyPlaceHoldConfigurer.
<Contexto: Property-PlaceLitder Location = "ClassPath: System.Properties" FILE-Encoding = "UTF-8"/>
Embora esse método exija que a propriedade seja criptografada ou as funções avançadas do uso de tabelas de banco de dados para salvar as informações de configuração, a classe PropertLaceHolderConFigurer deve ser estendida e, em seguida, o método de configuração do feijão mencionado anteriormente é adotado.
1.3 Método @Value (com base na anotação ou na configuração da classe Java)
Um feijão anotado pode injetar automaticamente os valores da propriedade nas variáveis ou métodos do membro do feijão anotado por @Value.
@ComPonentPublic Classe CustomDataSource {@Value ("$ {driverClassName}") Private String driverClassName; @Value ("$ {url}") private string url; @Value ("$ {userName}") private String UserName; @Value ("$ {senha}") Private String senha; // omita getter/setter}A classe que anota @configuration com base na própria classe Java anota @component, portanto, seu método de referência é o mesmo que o método de referência baseado na configuração da anotação.
Nota: Durante o uso, verifique se o valor do atributo referenciado existe no arquivo de atributo e no tipo de correspondência, caso contrário, uma exceção será lançada.
2 Valor do atributo de criptografia
Para obter informações de atributo insensível, é razoável aparecer em texto sem formatação no arquivo de atributo, mas se as informações do atributo forem informações confidenciais (como nome de usuário e senha do banco de dados, etc.), recomenda -se salvá -las no CipherText. Porque se as informações confidenciais forem armazenadas CipherText, qualquer pessoa com permissão de login do servidor poderá ver informações confidenciais, o que afetará a segurança do sistema.
Para sistemas que requerem requisitos particularmente de segurança (bancos, sistemas de segurança pública etc.), essas informações confidenciais devem estar apenas nas mãos de alguns funcionários de manutenção específicos. Portanto, precisamos criptografar essas informações e descriptografar o arquivo após o contêiner da mola lê o arquivo.
PropertyPlaceHoldConfigurer herda da classe PlowolderConfigurersupport, que projeta métodos para converter propriedades antes de serem usados:
| método | ilustrar |
|---|---|
| ConvertProperty (String PropertyName, String PropertyValue) | Quando cada valor da propriedade é carregado e lido, esse método é chamado para convertê -lo. |
| String ConvertPropertyValue (String originalValue) | É semelhante ao método anterior, exceto que os parâmetros são passados apenas no valor do atributo. |
| Void ConvertProperties (Propriedades adereços) | Converter todos os valores de atributo. |
Por padrão, esses três são métodos vazios. Podemos estender o PropertyPlaceHoldConfigurer para substituir os métodos de conversão correspondentes, apoiando assim arquivos de valor de propriedade criptografados.
2.1 DES Class de ferramentas de criptografia e descriptografia
A criptografia de informação é dividida em duas maneiras: simétricas e assimétricas. Simtricamente significa que as informações criptografadas podem ser descriptografadas, enquanto o método assimétrico não pode ser descriptografado como o valor original com base nas informações criptografadas. O MD5 pertence à criptografia assimétrica, e o DES pertence à criptografia simétrica. Então, aqui usamos DES para criptografar o valor do atributo; Ao ler o valor do atributo, use o DES para descriptografá -lo.
Clique aqui para obter o código -fonte da ferramenta de criptografia e descriptografia DES.
Instruções de criptografia e descriptografia DES:
Usamos a ferramenta de criptografia e descriptografia DES para criptografar a conta e a senha do banco de dados através da linha de comando; Em seguida, escreva a string criptografada para System.Properties, que é a seguinte:
nome de usuário = q5l+2pprspq = senha = udyjsvkxc/q =
2.2 Criptografar o valor do arquivo de atributo
Primeiro, personalize o configurador de atributos, que suporta conversão de descriptografia:
classe pública CustomPropertyPlaceHoldConfigurer estende a propriedade do PropertyPlaceHoldConfigurer { / *** des Key* / private Static final String key_str = "123456"; / *** Valor Grupo de nome da propriedade criptografada*/ public static final string [] Encrypt_property_names = new String [] {"nome de usuário", "senha"}; @Override Protected String ConvertProperty (String PropertyName, String PropertyValue) {if (! IsDecrypt (PropertyName)) {return PropertyValue; } // descriptografar retorno novo DES (key_str) .Decrypt (PropertyValue); } / ** * é necessário descriptografar * * @param PropertyName PropertyName PropertyName * / Private boolean isDecrypt (String PropertyName) {return Arrayutils.Contains (Encrypt_Property_Names, PropertyName); }}Perceber:
Em seguida, configure o arquivo de atributo personalizado através do <Bean>:
<bean p: location = "ClassPath: System.Properties" P: FileEncoding = "UTF-8"/>
Dessa forma, o contêiner de mola pode carregar os arquivos de atributo criptografados. Não é muito simples?
O (∩_∩) o haha ~
3 citações para si mesmo
A primavera permite referência ao valor do atributo através de $ {propName} na definição do feijão e também permite que o uso de $ {propName} implemente referências mútuas entre atributos no arquivo de propriedade.
Database = spring4driverclassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/$ {Database}Aqui, o valor de outro atributo (nome da instância do banco de dados) é referenciado através de $ {Database}. Portanto, para algumas propriedades complexas, podemos extrair as alterações nas propriedades dessa maneira para minimizar a configuração.
Nota: Se um valor de propriedade for muito longo, podemos adicionar "/" ao final de cada linha e dividir o valor da propriedade em várias linhas, assim: assim:
perfil.jdbc.url = jdbc: mysql: //127.0.0.1: 3306/dbname? useunicode = true & caracterizador/= utf-8/& zerodateTimeBeHavior = converttonull
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.