Al configurar recursos como fuentes de datos o servidores FTP, podemos colocar esta información de configuración en un archivo de atributo externo independiente y consultar elementos de atributo en el archivo de atributos a través de marcadores de posición como $ {user} y $ {contraseña} en el archivo de configuración de Spring.
Esta configuración tiene dos beneficios:
Spring proporciona un PropertyPlaceHolderConfigurer que puede hacer referencia a archivos de propiedades externas al cargar un bean. PropertyPlaceHolderConfigurer implementa la interfaz BeanFactoryPostProcessorBean, por lo que es un postprocesador de fábrica de Bean.
1 cita básica
1.1 Método PropertyPlaceHolderConfigurer (configuración XML)
Supongamos que necesita definir una fuente de datos en el bean:
<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: contraseña = "/>>
Aquí, el nombre de la clase del controlador, la URL JDBC y el nombre de usuario y la contraseña de la base de datos se escriben directamente en XML. De esta manera, si necesita cambiar la información de configuración de la base de datos durante la implementación, primero debe encontrar el XML y luego modificarla, lo cual es inconveniente.
Se recomienda extraer esta información en un archivo de configuración, suponiendo que el nombre sea System.Priperties:
DriverClassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/spring4username = rootpassword =
El archivo de atributo puede definir múltiples atributos, y el formato de cada atributo es:属性名=属性值
Configuración de resorte:
< p: contraseña = "$ {contraseña}"/>Después de esta configuración, solo necesitamos prestar atención a este archivo de configuración al implementar.
PropertyPlaceHolderConfigurer La descripción de la propiedad es la siguiente:
| propiedad | ilustrar |
|---|---|
| ubicación | Especifica la ruta al archivo de propiedades. |
| ubicación | Especifica la ruta a múltiples archivos de atributos. |
| FileCoding | El formato de codificación del archivo. Si no se especifica, Spring utilizará el formato de codificación predeterminado del sistema operativo para leer el contenido del archivo. |
| Orden | Si se definen múltiples propiedades de propiedad en el archivo de configuración, puede especificar el orden de prioridad a través de esta propiedad. |
| poseedor de posición | Sufijo de marcador de posición, el incumplimiento es $ {. |
| PilaterSuffix | Prefijo de marcador de posición, el valor predeterminado es}. |
1.2 Contexto: Método de Propiedad-PlaceHoder (configuración XML)
Puede usar el espacio de nombres de contexto para definir el archivo de propiedades, que es más elegante que el método de configuración de PropertyPlaceHolderConfigurer.
<context: Property-placeholder ubicación = "classpath: system.properties" archivo-ending = "utf-8"/>
Aunque este método requiere que la propiedad se encripte o las funciones avanzadas del uso de tablas de bases de datos para guardar información de configuración, la clase PropertyPlaceHolderConfigurer debe extenderse, y luego se adopta el método de configuración de Bean mencionado anteriormente.
1.3 @Value Método (basado en la anotación o la configuración de la clase Java)
Los frijoles anotados pueden inyectar automáticamente los valores de las propiedades en las variables o los métodos del miembro del bean anotado por @Value.
@ComponentPublic Class CustomDataSource {@Value ("$ {DriverClassName}") Private String DriverClassName; @Value ("$ {url}") URL de cadena privada; @Value ("$ {nombre de usuario}") Nombre de usuario de cadena privada; @Value ("$ {contraseña}") contraseña de cadena privada; // omitir getter/setter}La clase que anota @configuration basada en la clase Java en sí anota @Component, por lo que su método de referencia es el mismo que el método de referencia basado en la configuración de la anotación.
Nota: Durante el uso, asegúrese de que el valor de atributo referenciado exista en el archivo de atributo y el tipo de coincidencia, de lo contrario se lanzará una excepción.
2 Valor de atributo de cifrado
Para la información de atributos insensible, es razonable aparecer en texto plano en el archivo de atributos, pero si la información de atributo es información confidencial (como el nombre de usuario y la contraseña de la base de datos, etc.), se recomienda guardarla en texto cifrado. Porque si la información confidencial se almacena cifrado, entonces cualquier persona con permiso de inicio de sesión del servidor puede ver información confidencial, lo que afectará la seguridad del sistema.
Para los sistemas que requieren requisitos de seguridad particularmente altos (bancos, sistemas de seguridad pública, etc.), esta información confidencial solo debe estar en manos de un personal de mantenimiento específico. Por lo tanto, necesitamos cifrar esta información y luego descifrar el archivo después de que el contenedor de primavera lea el archivo.
PropertyPlaceHolderConfigurer hereda de la clase de apoyo a la propiedad de la vida, que diseña métodos para convertir las propiedades antes de que se utilicen:
| método | ilustrar |
|---|---|
| ConvertProperty (String PropertyName, String PropertyValue) | Cuando cada valor de propiedad se carga y lee, se llama a este método para convertirlo. |
| String ConvertPropertyValue (String OriginalValue) | Es similar al método anterior, excepto que los parámetros solo se pasan en el valor del atributo. |
| nulo convertaProperties (accesorios de propiedades) | Convierta todos los valores de atributo. |
Por defecto, estos tres son métodos vacíos. Podemos extender PropertyPlaceHolderConfigurer para anular los métodos de conversión correspondientes, lo que respalda los archivos de valor de propiedad cifrados.
2.1 Clase de herramienta de cifrado y descifrado de DES
El cifrado de información se divide en dos maneras: simétrico y asimétrico. Simétricamente significa que la información encriptada se puede descifrarse, mientras que el método asimétrico no puede descifrarse como el valor original basado en la información cifrada. MD5 pertenece al cifrado asimétrico, y DES pertenece al cifrado simétrico. Así que aquí usamos DES para encriptar el valor del atributo; Al leer el valor del atributo, use DES para descifrarlo.
Haga clic aquí para ver el código fuente de la herramienta de cifrado y descifrado de DES.
Instrucciones de cifrado y descifrado de DES:
Utilizamos la herramienta Des y de descifrado DES para cifrar la cuenta de la base de datos y la contraseña a través de la línea de comando; Luego escriba la cadena cifrada a System.Properties, que es la siguiente:
nombre de usuario = Q5L+2PPRSPQ = contraseña = UDYJSVKXC/Q =
2.2 Cifrar el valor del archivo de atributo
Primero, personalice el Configurador de atributos, que admite la conversión de descifrado:
clase pública CustomPropertyPlaceHolderConfigurer extiende PropertyPlaceHolderConfigurer { / *** des Key* / private static final string key_str = "123456"; / *** Valor Group de nombre de propiedad cifrado*/ public static final String [] CiCrypt_Property_Names = new String [] {"Nombre de usuario", "Password"}; @Override String ConvertProperty (String PropertyName, String PropertyValue) {if (! ISDecrypt (PropertyName)) {return PropertyValue; } // descifrado return nuevo des (key_str) .decrypt (PropertyValue); } / ** * ¿Es necesario descifrar * * @param Propertyname Propertyname Propertyname * / private boolean isDecrypt (string propertyname) {return arrayUtils.contains (cifrypt_property_names, proppertyname); }}Aviso:
Luego configure el archivo de atributo personalizado a través de <reman>:
<bean p: ubicación = "classpath: system.properties" P: fileEncoding = "UTF-8"/>
De esta manera, el contenedor Spring puede cargar los archivos de atributos cifrados. ¿No es muy simple?
O (∩_∩) o jaja ~
3 citas para uno mismo
Spring permite la referencia al valor del atributo a través de $ {propname} en la definición de Bean, y también permite el uso de $ {propname} implementar referencias mutuas entre atributos en el archivo de propiedades.
base de datos = Spring4DriverClassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/$ {base de datos}Aquí, el valor de otro atributo (nombre de instancia de base de datos) se hace referencia a través de $ {base de datos}. Por lo tanto, para algunas propiedades complejas, podemos extraer los cambios en las propiedades de esta manera para minimizar la configuración.
Nota: Si un valor de propiedad es demasiado largo, podemos agregar "/" al final de cada línea y dividir el valor de la propiedad en múltiples líneas, solo así:
perfil.jdbc.url = jdbc: mysql: //127.0.0.1: 3306/dbname? UseUnicode = true y caracterescoding/= utf-8/& zeroDateTimebehavior = Converttonull
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.