عند تكوين الموارد مثل مصادر البيانات أو خوادم FTP ، يمكننا وضع معلومات التكوين هذه في ملف سمة خارجي مستقل والإشارة إلى عناصر السمة في ملف السمة من خلال العناصر النائبة مثل $ {user} و $ {password} في ملف تكوين الربيع.
هذا التكوين له فوائدان:
يوفر Spring propertyplaceholderConfigurer الذي يمكنه الرجوع إلى ملفات الخصائص الخارجية عند تحميل الفول. PropertyPlaceholderConfigurer تنفذ واجهة BeanFactoryPostProcessorBean ، لذلك فهي مصنع ما بعد المعالج.
1 اقتباس أساسي
1.1 PropertyPlaceholderConfigurer طريقة (تكوين XML)
افترض أنك بحاجة إلى تحديد مصدر بيانات في الفول:
<bean id = "datasource" تدمير method = "close" p: driverClassName = "com.mysql.jdbc.driver" p: url = "jdbc: mysql: //127.0.0.1: 3306/spring4" p: username = "root" p: "
هنا ، يتم كتابة اسم فئة برنامج التشغيل ، URL url JDBC ، واسم مستخدم قاعدة البيانات وكلمة المرور مباشرة في XML. وبهذه الطريقة ، إذا كنت بحاجة إلى تغيير معلومات تكوين قاعدة البيانات أثناء النشر ، فأنت بحاجة أولاً إلى العثور على XML ثم تعديلها ، وهو أمر غير مريح.
يوصى باستخراج هذه المعلومات في ملف تكوين ، على افتراض أن الاسم هو system.priperties:
driverClassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/spring4username = rootpsword =
يمكن أن يحدد ملف السمة سمات متعددة ، وتنسيق كل سمة هو:属性名=属性值
تكوين الربيع:
<!-إدخال ملف الخصائص الخارجية-> <bean p: location = "classpath: system.properties" p: fileencoding = "utf-8"/> <!-data source-> <bean id = "dataSource" $ method = "close" p: driverClassName = "$ {driverClassName}" p: "url = P: username = "$ {username}" p: password = "$ {password}"/>بعد هذا التكوين ، نحتاج فقط إلى الانتباه إلى ملف التكوين هذا عند النشر.
propertyplaceholderConfigurer وصف الخاصية على النحو التالي:
| ملكية | يوضح |
|---|---|
| موقع | يحدد المسار إلى ملف الخاصية. |
| المواقع | يحدد المسار إلى ملفات السمات المتعددة. |
| fileencoding | تنسيق الترميز للملف. إذا لم يتم تحديدها ، فسيستخدم Spring تنسيق الترميز الافتراضي لنظام التشغيل لقراءة محتويات الملف. |
| طلب | إذا تم تعريف PropertyPlaceholderConfigurers في ملف التكوين ، فيمكنك تحديد ترتيب الأولوية من خلال هذه الخاصية. |
| نائب النائب | لاحقة العنصر النائب ، الافتراضي هو $ {. |
| نائب المسلح | بادئة العنصر النائب ، الافتراضي هو}. |
1.2 السياق: طريقة Property-PlaceHoder (تكوين XML)
يمكنك استخدام مساحة اسم السياق لتحديد ملف الخصائص ، وهو أكثر أناقة من طريقة التكوين لـ PropertyPlaceholderConfigurer.
<السياق: property-placeholder location = "classpath: system.properties" file-encoding = "utf-8"/>
على الرغم من أن هذه الطريقة تتطلب تشفير الخاصية أو الوظائف المتقدمة لاستخدام جداول قاعدة البيانات لحفظ معلومات التكوين ، يجب تمديد فئة PROPERTIOMOLDORDORCONFIGURER ، ثم يتم اعتماد طريقة تكوين الفول المذكورة سابقًا.
1.3 طريقة Value (استنادًا إلى التعليق التوضيحي أو تكوين فئة Java)
يمكن للفاصوليا المشروحة حقن قيم الخصائص تلقائيًا في متغيرات الأعضاء أو طرق الفول المشروح بواسطة Value.
ComponentPublic Class CustomDataSource {Value ("$ {driverClassName}") سلسلة خاصة driverClassName ؛ Value ("$ {url}") url url سلسلة خاصة ؛ value ("$ {username}") سلسلة username الخاصة ؛ Value ("$ {password}") كلمة مرور السلسلة الخاصة ؛ // حذف getter/setter}الفئة التي تعرض التعليق على التكيف على أساس فئة Java نفسها إلى @Component ، لذلك فإن طريقة المرجع الخاصة بها هي نفس طريقة المرجع بناءً على تكوين التعليقات التوضيحية.
ملاحظة: أثناء الاستخدام ، تأكد من وجود قيمة السمة المرجعية في ملف السمة والمطابقة ، وإلا سيتم طرح استثناء.
2 قيمة سمة التشفير
بالنسبة لمعلومات السمة غير الحساسة ، من المعقول أن تظهر في نص عادي في ملف السمة ، ولكن إذا كانت معلومات السمة هي معلومات حساسة (مثل اسم مستخدم قاعدة البيانات وكلمة المرور ، إلخ) ، فمن المستحسن حفظها في النص المشفر. لأنه إذا تم تخزين المعلومات الحساسة ، فقد يرى أي شخص لديه إذن تسجيل الدخول إلى الخادم معلومات سرية ، والتي ستؤثر على أمان النظام.
بالنسبة للأنظمة التي تتطلب متطلبات أمان عالية بشكل خاص (البنوك ، أنظمة الأمن العام ، وما إلى ذلك) ، يجب أن تكون هذه المعلومات الحساسة في أيدي بعض موظفي الصيانة المحددة. لذلك ، نحتاج إلى تشفير هذه المعلومات ، ثم فك تشفير الملف بعد قراءة حاوية الربيع.
يرث PropertyPlaceholderConfigurer من فئة ParentDerConfigurersupport ، التي تصمم طرقًا لتحويل الخصائص قبل استخدامها:
| طريقة | يوضح |
|---|---|
| ConvertProperty (String PropertyName ، String PropertyValue) | عندما يتم تحميل كل قيمة خاصية وقراءتها ، يتم استدعاء هذه الطريقة لتحويلها. |
| سلسلة ConvertPropertyValue (String OriginalValue) | يشبه الطريقة السابقة ، باستثناء أن المعلمات يتم تمريرها فقط في قيمة السمة. |
| void convertProperties (خصائص الدعائم) | تحويل جميع قيم السمة. |
بشكل افتراضي ، هؤلاء الثلاثة طرق فارغة. يمكننا تمديد PropertyPlaceholderConfigurer لتجاوز طرق التحويل المقابلة ، وبالتالي دعم ملفات قيمة الخصائص المشفرة.
2.1 فئة أدوات التشفير وفك التشفير
ينقسم تشفير المعلومات إلى طريقتين: متماثل وغير متماثل. يعني بشكل متماثل أنه يمكن فك تشفير المعلومات المشفرة ، في حين لا يمكن فك تشفير الطريقة غير المتماثلة كقيمة أصلية استنادًا إلى المعلومات المشفرة. ينتمي MD5 إلى التشفير غير المتماثل ، وينتمي DES إلى التشفير المتماثل. لذلك نحن هنا نستخدم DES لتشفير قيمة السمة ؛ عند قراءة قيمة السمة ، ثم استخدم DES لفك تشفيرها.
يرجى النقر هنا للحصول على رمز المصدر لشراء DES و ACRYPTION.
تعليمات التشفير وفك التشفير:
نستخدم أداة التشفير والتشفير DES لتشفير حساب قاعدة البيانات وكلمة المرور من خلال سطر الأوامر ؛ ثم اكتب السلسلة المشفرة إلى system.properties ، والتي هي كما يلي:
اسم المستخدم = Q5L+2PPRSPQ = كلمة المرور = UDYJSVKXC/Q =
2.2 تشفير قيمة ملف السمة
أولاً ، قم بتخصيص تكوين السمات ، الذي يدعم تحويل فك التشفير:
الطبقة العامة CustomProperTyplaceholderConfigurer يمتد propertyholderConfigurer { / *** des key* / private static final string key_str = "123456" ؛ / *** قيمة اسم اسم خاصية المشفرة*/ السلسلة النهائية الثابتة العامة [] incrypt_property_names = new string [] {"username" ، "password"} ؛ OverRide محمي السلسلة ConvertProperty (String PropertyName ، String PropertyValue) {if (! isDecrypt (propertyName)) {return propertyValue ؛ } // decrypt return new des (key_str) .Decrypt (propertyValue) ؛ } / ** * هل من الضروري فك تشفير * * param 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 (∩_∩) يا هاها ~
3 اقتباسات لنفسها
يتيح Spring إشارات إلى قيمة السمة من خلال $ {propname} في تعريف الفول ، ويسمح باستخدام $ {propname} بتنفيذ المراجع المتبادلة بين السمات في ملف الخاصية.
database = spring4driverClassName = com.mysql.jdbc.driverurl = jdbc: mysql: //127.0.0.1: 3306/$ {database}هنا ، تتم الرجوع إلى قيمة سمة أخرى (اسم مثيل قاعدة البيانات) من خلال $ {database}. لذلك ، بالنسبة لبعض الخصائص المعقدة ، يمكننا استخراج التغييرات في الخصائص بهذه الطريقة لتقليل التكوين.
ملاحظة: إذا كانت قيمة الخاصية طويلة جدًا ، فيمكننا إضافة "/" إلى نهاية كل سطر ، وتقسيم قيمة الخاصية إلى خطوط متعددة ، تمامًا مثل هذا:
profile.jdbc.url = jdbc: mysql: //127.0.0.1: 3306/dbname؟ useUnicode = true & fashionoding/= utf-8/& ZerodateTimeBehavior = converttonull
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.