سؤال

أثناء تطوير تطبيق من المفيد جدا أن تكون قادرة على الدخول بسرعة من المستخدمين مختلفة ، مع أدوار مختلفة ، لنرى كيف يعرض التطبيق نفسه.

كتابة اسم المستخدم و إدخال كلمة السر في أي متعة ، و مضيعة للوقت.ما أود القيام به هو:

  • إضافة صفحة/لوحة مع قائمة أسماء;
  • النقر على اسم المستخدم سوف تولد حدث عن الربيع الأمن الذي يسمح لها أن تتعرف على المستخدم المصادق عليهم ، دون الدخول وكلمات السر.
  • بعد النقر على الرابط أنا المصادقة على النحو المحدد من قبل المستخدم.

N. B.:كلمات السر هي تجزئته المقدمة في نص عادي باستخدام الأشكال ، لذلك تشفير كلمات المرور في الروابط ليس خيارا.

من الواضح هذه الميزة سوف تكون موجودة في ذلك الوقت.

كيف يمكنني تحقيق ذلك ؟

هل كانت مفيدة؟

المحلول

لقد فعلت هذه الطريقة على تطبيق ويب:

لدي تكوين المعلمة في context.xml الخادم (طبعا فقط في تطوير الخادم).هذه المعلمة يحتوي على غيبوبة فصل قائمة من أسماء المستخدمين وكلمات السر.

صفحة تسجيل الدخول (jsp(x)) ببساطة إضافة إضافية شكل زر الإرسال لكل اسم المستخدم, كلمة المرور البند شكل سياق المعلمة.حتى إذا ينقر المستخدم على هذا الزر العادي عملية تسجيل الدخول مع محددة مسبقا بيانات الدخول trigged.

الخادم context.xml

...
<Context>
    ...
    <Parameter name="quickLogin"
               value="admin:passwd,user:otherPasswd"
               override="false" />
</Context>

تسجيل الدخول.jspx

...
<!-- Login for debugging purposes -->     
<c:forTokens items="${initParam.quickLogin}" delims="," var="loginPassword">
    <c:set var="login" value="${fn:split(loginPassword, ':')[0]}" />
    <c:set var="password" value="${fn:split(loginPassword, ':')[1]}" />

    <form name="debugLogin" action="${form_url}" method="POST" >
        <crsf:hiddenCrsfNonce/>
        <input type="hidden" name='j_username' value="${fn:escapeXml(login)}" />
        <input type="hidden" name='j_password' value="${fn:escapeXml(password)}" />
        <input type="submit" value="${fn:escapeXml(login)} login" />
    </form>
</c:forTokens>
...

نصائح أخرى

استخدام InMemoryDaoImpl عن نمط التنمية.فمن السهل جدا لإنشاء المستخدمين وكلمات المرور المخزنة في الذاكرة:

<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
  <property name="userMap">
    <value>
      admin=admin,ROLE_ADMIN,ROLE_USER
      user1=user1,ROLE_USER
      user2=user2,ROLE_USER
    </value>
  </property>
</bean>

في تطوير طريقة حقن هذا إلى موفر المصادقة.في إنتاج استبدالها السليم DB أو LDAP التنفيذ.

كما أفهم كنت ترغب في الحصول على SpringSecurity المصادقة تلقائيا إذا كان بعض محددة URL المطلوب (و سيكون لديك ارتباط إلى عنوان URL هذا في لوحة الخاص بك/الصفحة).

حول كيفية كتابة عامل تصفية مخصص:

public class YourSpecialDevelopmentTimeFilter 
extends AuthenticationProcessingFilter 
implements SyncSecurityFilter
....

التي من شأنها تجاوز:

protected boolean requiresAuthentication(
     HttpServletRequest request, HttpServletResponse response)

والعودة الحقيقية اعتمادا على بعض المعلمات في request?

بالطبع مصدر قلق آخر هو أن لا يكون هذا الأداء في بيئات الإنتاج.الذي هو دائما محفوفة بالمخاطر شيء أن يكون رموز مختلفة-قاعدة ديف و همز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top