Saat mengkonfigurasi sumber daya seperti sumber data atau server FTP, kami dapat menempatkan informasi konfigurasi ini ke dalam file atribut eksternal independen dan merujuk ke item atribut dalam file atribut melalui placeholder seperti $ {user} dan $ {kata sandi} dalam file konfigurasi pegas.
Konfigurasi ini memiliki dua manfaat:
Spring menyediakan propertyplaceHolderConfigurer yang dapat merujuk file properti eksternal saat memuat kacang. PropertPlaceHolderConfigurer mengimplementasikan antarmuka BeanFactoryPostProcessorBean, jadi ini adalah postprocessor pabrik kacang.
1 Kutipan Dasar
1.1 METODE METODE PROPERTOLEDERCFIGURER (Konfigurasi XML)
Misalkan Anda perlu mendefinisikan sumber data dalam kacang:
<bean id = "DataSource" Destroy-Method = "Tutup" P: DriverClassName = "com.mysql.jdbc.driver" p: url = "jdbc: mysql: //127.0.0.1: 3306/spring4" p: username = "root" p: "" "
Di sini, nama kelas driver, URL JDBC, dan nama pengguna dan kata sandi basis data ditulis langsung dalam XML. Dengan cara ini, jika Anda perlu mengubah informasi konfigurasi basis data selama penyebaran, Anda harus terlebih dahulu menemukan XML dan kemudian memodifikasinya, yang tidak nyaman.
Disarankan untuk mengekstrak informasi ini ke dalam file konfigurasi, dengan asumsi namanya System.priperties:
driverclassName = com.mysql.jdbc.driverUrl = jdbc: mysql: //127.0.0.1: 3306/spring4username = rootpassword =
File atribut dapat mendefinisikan beberapa atribut, dan format setiap atribut adalah:属性名=属性值
Konfigurasi Musim Semi:
<!-Memperkenalkan file properti eksternal-> <bean p: location = "classpath: system.properties" p: fileencoding = "utf-8"/> <!-sumber data-> <bean id = "dataSource" dash-method = "tutup" p: driverclassname = "$ {driverclassname}" p: "p:" $ "$" $ {$ {$ {$ {$ {$ {$ {$ {URLE "p:" tutup "p: driverclassname =" $ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {$ {URLASSNAME = "$ P: userName = "$ {username}" p: password = "$ {password}"/>Setelah konfigurasi ini, kita hanya perlu memperhatikan file konfigurasi ini saat digunakan.
Deskripsi properti PropertallerConfigurer adalah sebagai berikut:
| milik | menjelaskan |
|---|---|
| Lokasi | Menentukan jalur ke file properti. |
| lokasi | Menentukan jalur ke beberapa file atribut. |
| Fileencoding | Format pengkodean file. Jika tidak ditentukan, Spring akan menggunakan format pengkodean default sistem operasi untuk membaca konten file. |
| Memesan | Jika beberapa PropertyplaceHolderConfigurers didefinisikan dalam file konfigurasi, Anda dapat menentukan urutan prioritas melalui properti ini. |
| PlaceholderPrefix | Suffix placeholder, default adalah $ {. |
| Placeholdersuffix | Awalan placeholder, default adalah}. |
1.2 Konteks: Metode Properti-PlaceHoder (Konfigurasi XML)
Anda dapat menggunakan namespace konteks untuk mendefinisikan file properti, yang lebih elegan daripada metode konfigurasi PropertyplaceHolderConfigurer.
<konteks: Lokasi pemegang tempat properti = "classpath: system.properties" file-encoding = "UTF-8"/>
Meskipun metode ini mengharuskan properti dienkripsi atau fungsi lanjutan menggunakan tabel basis data untuk menyimpan informasi konfigurasi, kelas PropertyplaceHolderConfigurer harus diperluas, dan kemudian metode konfigurasi kacang yang disebutkan sebelumnya diadopsi.
1.3 @Value Metode (berdasarkan anotasi atau konfigurasi kelas Java)
Kacang beranotasi dapat secara otomatis menyuntikkan nilai properti ke dalam variabel anggota atau metode kacang yang dijelaskan oleh @Value.
@ComponentPublic kelas CustomDataSource {@Value ("$ {driverClassName}") Private String DriverClassName; @Value ("$ {url}") private string url; @Value ("$ {username}") Private String username; @Value ("$ {password}") kata sandi string pribadi; // hilangkan getter/setter}Kelas yang menganotasi @configuration berdasarkan kelas Java itu sendiri menganotasi @Component, sehingga metode referensinya sama dengan metode referensi berdasarkan konfigurasi anotasi.
Catatan: Selama penggunaan, pastikan bahwa nilai atribut yang direferensikan ada dalam file atribut dan tipe yang cocok, jika tidak, pengecualian akan dilemparkan.
2 Nilai atribut enkripsi
Untuk informasi atribut yang tidak sensitif, masuk akal untuk muncul dalam teks biasa dalam file atribut, tetapi jika informasi atribut adalah informasi sensitif (seperti nama pengguna dan kata sandi basis data, dll.), Disarankan untuk menyimpannya di ciphertext. Karena jika informasi sensitif disimpan ciphertext, maka siapa pun dengan izin login server dapat melihat informasi rahasia, yang akan memengaruhi keamanan sistem.
Untuk sistem yang membutuhkan persyaratan keamanan yang sangat tinggi (bank, sistem keamanan publik, dll.), Informasi sensitif ini hanya ada di tangan beberapa personel pemeliharaan tertentu. Oleh karena itu, kita perlu mengenkripsi informasi ini, dan kemudian mendekripsi file setelah Container Spring membaca file.
PropertyplaceHolderConfigurer mewarisi dari PlaceholderConfigurersupport Class, yang merancang metode untuk mengonversi properti sebelum digunakan:
| metode | menjelaskan |
|---|---|
| ConvertProperty (String PropertyName, String PropertyValue) | Ketika setiap nilai properti dimuat dan dibaca, metode ini dipanggil untuk mengonversinya. |
| String ConvertPropertyValue (String OriginalValue) | Ini mirip dengan metode sebelumnya, kecuali bahwa parameter hanya diteruskan dalam nilai atribut. |
| void convertProperties (Properties Props) | Konversi semua nilai atribut. |
Secara default, ketiganya adalah metode kosong. Kami dapat memperluas PropertyplaceHolderConfigurer untuk mengganti metode konversi yang sesuai, sehingga mendukung file nilai properti terenkripsi.
2.1 Kelas Alat Enkripsi dan Dekripsi DES
Enkripsi informasi dibagi menjadi dua cara: simetris dan asimetris. Secara simetris berarti bahwa informasi terenkripsi dapat didekripsi, sedangkan metode asimetris tidak dapat didekripsi sebagai nilai asli berdasarkan informasi terenkripsi. MD5 milik enkripsi asimetris, dan DES milik enkripsi simetris. Jadi di sini kami menggunakan DES untuk mengenkripsi nilai atribut; Saat membaca nilai atribut, lalu gunakan DES untuk mendekripsi.
Silakan klik di sini untuk kode sumber Alat Enkripsi dan Dekripsi Des.
Inskripsi dan dekripsi des:
Kami menggunakan alat enkripsi dan dekripsi DES untuk mengenkripsi akun database dan kata sandi melalui baris perintah; Kemudian tulis string terenkripsi ke System.properties, yaitu sebagai berikut:
UserName = q5l+2pprspq = kata sandi = udyjsvkxc/q =
2.2 mengenkripsi nilai file atribut
Pertama, sesuaikan konfigurator atribut, yang mendukung konversi dekripsi:
kelas publik CustomPropertyplaceHolderConfigurer memperluas propertiPlaceLerConfigurer { / *** DES Key* / Private Static Final String KEY_STR = "123456"; / *** Nilai Grup Nama Properti Dienkripsi*/ Public Static Final String [] encrypt_property_names = string baru [] {"nama pengguna", "kata sandi"}; @Override Protected String ConvertProperty (String PropertieName, String PropertyValue) {if (! IsDecrypt (PropertiDyName)) {return propertivalue; } // decrypt return baru des (key_str) .decrypt (PropertyValue); } / ** * Apakah perlu untuk mendekripsi * * @param PropertiDyName PropertiyName PropertiesIname * / Private Boolean IsDecrypt (String PropertieName) {return arrayutils.contains (encrypt_property_names, propertieName); }}Melihat:
Kemudian konfigurasikan file atribut khusus melalui <ean>:
<Bean P: Lokasi = "ClassPath: System.Properties" P: Fileencoding = "UTF-8"/>
Dengan cara ini, Container Spring dapat memuat file atribut terenkripsi. Bukankah itu sangat sederhana?
O (∩_∩) o haha ~
3 kutipan untuk diri sendiri
Spring memungkinkan referensi ke nilai atribut melalui $ {propname} dalam definisi kacang, dan memungkinkan penggunaan $ {propName} untuk mengimplementasikan referensi timbal balik antara atribut dalam file properti.
database = spring4driverclassname = com.mysql.jdbc.driverUrl = jdbc: mysql: //127.0.0.1: 3306/$ {database}Di sini, nilai atribut lain (nama instance database) dirujuk melalui $ {database}. Oleh karena itu, untuk beberapa sifat kompleks, kami dapat mengekstrak perubahan properti dengan cara ini untuk meminimalkan konfigurasi.
Catatan: Jika nilai properti terlalu panjang, kita dapat menambahkan "/" ke akhir setiap baris, dan membagi nilai properti menjadi beberapa baris, seperti ini:
profile.jdbc.url = jdbc: mysql: //127.0.0.1: 3306/dbname? UseUnicode = true & characterencoding/= UTF-8/& ZerodateTimebehavior = converttonull
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.