هذه المقالة هي ترجمة لمقياس الإعداد المهني لشهادة Spring Professional .
سيغطي موضوع Spring Security والأسئلة الرئيسية حوله.
يمكن استخدامه أيضًا للتحضير للمقابلة.
articles تتوفر مقالات أخرى على الروابط في جدول المحتويات ↓

أسئلة أنفسهم:
ما هو المصادقة والترخيص؟المصادقة هي عملية التحقق من مستخدم نظام الكمبيوتر.
هكذا يحدث في الربيع:
- يتم تحويل كلمة المرور الناتجة واسم المستخدم إلى مثيل من UsernamePasswordAuthenticationToken . ينفذ واجهة المصادقة .
- يتم تمرير الرمز المميز إلى كائن
AuthenticationManager
للتحقق - إذا نجحت AM ،
Authentication
كائن Authentication
مأهول - يتم تعيين سياق الأمان عن طريق استدعاء
SecurityContextHolder.getContext().setAuthentication(...)
التخويل هو عملية التحقق من أن المستخدم لديه الدور المطلوب لاتخاذ إجراء. أثناء التفويض ، يتم التحقق مما إذا كان لديك الحقوق المناسبة للوصول إلى المورد.
عملية:
- بواسطة المدير (الرئيسي) للمستخدم ، يتم عرض دوره
- فحص دور المستخدم مقابل دور المورد
أولاً ، تتم المصادقة ثم المصادقة.
كيف يعمل الأمن داخليًا؟باستخدام وكلاء Spring AOP التي ترث من فئة AbstractSecurityInterceptor.
يتم استخدامه للطرق التي تستدعي التخويل.
تعتمد البنية الأساسية لشبكة الأمان على مرشحات servlet.
تتمثل الخطوة الأولى في تكوين عامل التصفية DelegatingFilterProxy
. يقوم بتفويض الطلب إلى FilterChainProxy
.
FilterChainProxy
عبارة عن فاصوليا يقبل SecurityFilterChain
واحد أو أكثر في المُنشئ.
يقارن SeccurityFilterChain
URL في الطلب مع قائمة عوامل التصفية.

الميزات الرئيسية المشاركة في ربيع الأمنSecurityContextHolder
- يحتوي ويوفر الوصول إلى SecurityContext في التطبيق.
SecurityContext
- التطبيق الافتراضي لـ Spring Security الذي يحتوي على كائن المصادقة.
Authentication
- توفر رمزًا مميزًا لطلب مصادقة أو لمدير تمت المصادقة. يحتوي أيضًا على قائمة الصلاحيات التي يتمتع بها المدير.
GrantedAuthority
- يحتوي على السلطة الممنوحة GrantedAuthority
.
UserDetails
- تحتوي على معلومات حول المستخدم: كلمة المرور ، تسجيل الدخول ، الأذونات. تُستخدم هذه المعلومات لإنشاء كائن مصادقة بعد مصادقة ناجحة.
UserDetailsService
- تقوم هذه الخدمة باسترداد معلومات حول المستخدم من المستودع (ذاكرة البرنامج ، قاعدة البيانات ، إلخ) وتضعها في UserDetails.
ما هو مرشح الوكيل المفوض؟فئة DelegatingFilterProxy
هي فئة تطبق واجهة javax.Servlet.Filter
.
هذا هو مرشح خاص يفوض العمل للفاصوليا الأخرى ، والتي هي أيضا مرشحات.
ما هي سلسلة مرشح الأمن؟تطبق سلسلة التصفية واجهة SecurityFilterChain
. التنفيذ الذي يوفره Spring Security هو DefaultSecurityFilterChain.
يقبل مُنشئ DSFC عدة معلمات. المعلمة الأولى هي طلب المطابق. المعلمات المتبقية هي المرشحات التي تنفذ واجهة servlet.Filter. فيما يلي جميع المرشحات المقبولة من قبل DSFC:
ChannelProcessingFilter
SecurityContextPersistenceFilter
ConcurrentSessionFilter
- أي مصادقة. عامل التصفية:
UserNamePasswordAuthenticationFilter
/ CasAythenticationFilter
/ BasicAuthenticationFilter
SecurityContextHolderAwareRequestFilter
JaasApiIntegrationFilter
RemeberMeAuthenticationFilter
AnonymusAuthenticationFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
ما هو السياق الأمني؟الكائن الأساسي هو SecurityContextHolder
. هذا هو المكان الذي يتم فيه تخزين تفاصيل سياق الأمان الحالي ، على سبيل المثال ، تفاصيل المدير الذي يستخدم التطبيق حاليًا. بشكل افتراضي ، ThreadLocal
استخدام ThreadLocal
للتخزين.
الكائن الذي تم إرجاعه بواسطة الأسلوب getContext()
هو SecurityContext
. انها تسمح لك لتلقي وإعداد كائن Authentication
.
تمثل Authentication
الخصائص التالية:
- جمع الصلاحيات الممنوحة لمدير المدرسة
- بيانات تعريف المستخدم (تسجيل الدخول وكلمة المرور)
- التفاصيل - إضافة. المعلومات ، إذا لزم الأمر. قد يكون لاغيا
- ناظر
- علامة المصادقة - متغير منطقي يشير إلى ما إذا كان المدير نجح في الاختبار بنجاح
كيفية تعيين اعتراض نقرات المستخدم على عناوين URL محددة؟ @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests()
ماذا تعني * في أساليب antMatchers و mvcMatchers ()؟هذا التعبير يعني "أي".
هناك نوعان:
*
- اعتراض فقط على المستوى الذي يتم استخدامه.
على سبيل المثال ، سيتحقق النموذج "/ orders / *" من حقوق المستخدم إذا اتبع المستخدم
/ أوامر / الأجانب أو / أوامر / 1 ، ولكن ليس / أوامر / أجنبي / 1.
**
- اعتراض على جميع المستويات.
سيتم فحص أي طلبات ، / أوامر / الأجانب ، / أوامر / 1 ، / أوامر / أجنبي / 1.
لماذا يكون mvcMatcher أكثر أمانًا من antMatcher؟لأن antMatcher(“/service”)
يعيّن مسار الطلب فقط إلى “/service”
، بينما mvcMatcher(“/service”)
يعين “/service”
، “/service.html”
، "/service.abc" .
هل الربيع يدعم تجزئة كلمة المرور؟ ما هو الملح؟نعم ، إنها كذلك. هناك واجهة PasswordEncoder
للتجزئة ، والتي تحتوي على طريقة واحدة فقط:
static PasswordEncoder createDelegatingPasswordEncoder()
، والتي ترجع الافتراضي DelegatePasswordEncoder
.
يستخدم الملح لحساب قيمة تجزئة كلمة المرور. هذا هو سلسلة من الأرقام العشوائية التي يتم استخدامها لتحويل كلمة مرور نصية إلى علامة تجزئة. يتم تخزين الملح بشكل واضح بجوار كلمة مرور التجزئة ويمكن استخدامه لاحقًا عند تحويل كلمة مرور نظيفة إلى علامة تجزئة مع تسجيل دخول مستخدم جديد.
لماذا تحتاج إلى حماية للطرق؟ كيفية تثبيته؟يدعم Spring Security حماية الطرق الفردية في الفول (على سبيل المثال ، في وحدات التحكم). هذه طبقة حماية إضافية للتطبيق.
يجب تحديده بشكل صريح باستخدام التعليق التوضيحي @EnableGlobalMethodSecurity
.
ماذا يفعل التعليق التوضيحيRolesAllowed؟يستند هذا التعليق التوضيحي إلى JSR-250.
@RolesAllowed
يسمح لك بتكوين الوصول إلى الأساليب (على سبيل المثال ، في فئة وحدة التحكم) باستخدام الأدوار.
مثال: @RolesAllowed(“ADMIN”)
سوف تسمح فقط للمستخدمين الذين لديهم دور ADMIN
للاستخدام ، تحتاج إلى تعيين @EnableGlobalMethodSecurity(jsr250Enabled=true)
على فئةConfiguration + تحتاج إلى أن يكون هذا التعليق التوضيحي في classpath.
أخبرنا عنPreAuthorize@PreAuthorize
يسمح لك بتكوين الوصول إلى الطريقة باستخدام SpEL.
للاستخدام ، تحتاج إلى تعيين @EnableGlobalMethodSecurity(prePostEnabled=true)
كيف يتم تنفيذ كل هذه التعليقات التوضيحية؟يتم استخدام وظيفة نهاية إلى نهاية باستخدام Spring AOP (كائنات الوكيل).