سؤال

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

نحن نستخدم نظامًا مصنوعًا في GWT، نموذج تسجيل الدخول الخاص بنا، عند النجاح، يفتح صفحة أخرى في نافذة جديدة.

وهذا ما حاولت حتى الآن:ملف:أمان سياق التطبيق:

...
<http auto-config="true">
           <intercept-url pattern='/*Login.html' access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern='/**/*MainScreen.html' access="ROLE_ADMIN"/>   
        <form-login login-page="/Login.html"/><!-- This is the default login page -->
    </http>
<authentication-provider>
        <user-service>
            <user name="test1" password="abc" authorities="ROLE_ADMIN" />
            <user name="test2" password="test" authorities="ROLE_ADMIN" />
        </user-service>
</authentication-provider>
...

رمز تسجيل الدخول المخصص (عند النقر على زر موافق):

        RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST,"j_spring_security_check");
        requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
        //-- sending the username and the password in designated fields.
        //Hard coding values for testing reasons:
        requestBuilder.setRequestData("j_username=test1" +
                        "&j_password=abc");

        requestBuilder.setCallback(new RequestCallback() {
            public void onError(Request request, Throwable exception)
            {
                Window.alert("ERROR !!!"+exception.getMessage());
            }
            public void onResponseReceived(Request request, Response response)
            {
                if (response.getStatusCode() != Response.SC_UNAUTHORIZED && response.getStatusCode() != Response.SC_OK)
                { 
                    onError(request, new RequestException(response.getStatusText() + ":\n" + response.getText())); 
                    return; 
                }

                if (response.getStatusCode() == Response.SC_UNAUTHORIZED)
                { 
                    //This code is never encountered !! :((
                    Window.alert("You have entered an incorrect username or password. Please try again."); 
                }
                else
                { 
                    String height = 800+"";
                    String width = 600+"";

                    Window.alert("Authorisation succeeded, you may enter....");
                    Window.open("MainScreen.html", "Main screen!!", "height=" + height + ",width=" + width
                                    + ",scrollbars=yes,resizable=yes,titlebar=no,toolbar=no,status=yes,close=no,left=0,top=0");
                } 

            }
        });
        requestBuilder.send();

مشاكل:

  1. تسجيل الدخول غير صحيح:يظهر النجاح ويفتح نافذة منبثقة تحتوي على شاشة تسجيل الدخول !!(من الواضح أن تسجيل الدخول لم ينجح ولكن شاشة تسجيل الدخول لم تتمكن من اكتشاف ذلك)
  2. لا أرغب في ترميز القيم في موفر المصادقة، هل هناك طريقة أخرى يمكنني من خلالها تقديم صفي الخاص؟لقد جربت العديد من البرامج التعليمية ولكن دون جدوى، يبدو أن جميعها تشير إلى السماح لـ Spring بالقيام بعمل المقارنة عبر قاعدة بيانات أو أي نوع آخر من الملفات، ألا يمكنني القيام بذلك بنفسي؟
هل كانت مفيدة؟

المحلول

يبدو لي أنك بحاجة إلى كتابة UserDetailsService الخاصة بك.هذه هي واجهة Spring Security التي تملأ SecurityContext.getPrincipal() بتفاصيل المستخدم.إذا لم يتم ملء هذا الكائن بحلول نهاية سلسلة تصفية الأمان، فسيقوم Spring بإلقاء استثناء ترخيص يمكن اكتشافه ويمكن إعادة توجيه المستخدم إلى صفحة/جزء آخر من التطبيق.

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