كيف يمكنني تحميل أمن الربيع الكسول؟
-
22-09-2019 - |
سؤال
كيف لا أقوم بتثبيت أمان الربيع حتى أحتاج إلى ذلك؟
أنا أستخدم محرك تطبيق Google ، لذا فإن وقت بدء تشغيل تطبيق الويب الخاص بي مهم. في بعض الأحيان عندما يطلب المستخدم صفحة ، يجب عليهم الانتظار طوال الوقت لتطبيق تطبيق الويب الخاص بي قبل الحصول على استجابة (يسمى هذا طلب تحميل).
لا تتطلب صفحات معينة من تطبيقي أي مصادقة. بالنسبة لهذه الصفحات ، إذا كان الطلب هو طلب تحميل ، فأنا لا أريد أن يضطر المستخدم إلى الانتظار الإضافي ~ 1.5 ثانية حتى يتم إنشاء أمان سبرينغ.
لقد اكتشفت بالفعل كيفية تحميل جميع المكونات الأخرى في تطبيقي ، أمان الربيع هو الوحيد الذي لا أعرف كيف. أي شخص لديه فكرة؟
تحرير: إذا كان أي شخص يعرف كيفية تثبيت أمان الربيع من الكود بدلاً من استخدام ApplicationContext-security.xml ، فأعتقد أنه يمكنني معرفة كيفية تحميله.
المحلول
حسنًا ، لقد اكتشفت ذلك أخيرًا. اضطررت إلى الفئة الفرعية org.springframework.web.context.ContextLoaderListener
و org.springframework.web.filter.DelegatingFilterProxy
لعدم فعل أي شيء حتى أتصل بأسلوب تنشيط عليها.
نصائح أخرى
الموصوفة هنا عملت بالنسبة لي:
... يمكنك حل هذه المشكلة مع أي LazyInittargetSource لـ UserDetailsService.
<bean id="userDetailsService" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource">
<bean class="org.springframework.aop.target.LazyInitTargetSource">
<property name="targetBeanName" value="targetUserDetailsService"/>
</bean>
</property>
</bean>
<bean id="targetUserDetailsService" class="MyCustomUserService" lazy-init="true">
....
</bean>
يمكنك التكوين <url-pattern>
S of Spring Security Filter Mapping in web.xml
لمطابقة الموارد المضمونة فقط (وكذلك صفحات تسجيل الدخول والموارد الأخرى التي تتطلب معالجة أمان الربيع) ، ولف المرشح الافتراضي مع الغلاف الكسول الخاص بك ، كما فعلت مع DispatcherServlet
.
تعديل:يبدو أن المشكلة أكثر تعقيدًا مما كنت أعتقد. يمكنك أيضًا محاولة تحديد Security XML الخاص بك AS <beans default-lazy-init="true" ...>