Frage

Ich muss im Frühjahr eine benutzerdefinierte Authentifizierung haben. Es sollte eine einfache Klasse sein, die den Benutzernamen und das Kennwort einnimmt, das von einem Benutzer bereitgestellt wird, und es mit einigen Werten vergleicht und basierend darauf authentifizieren sollte.

Wir verwenden ein in GWT hergestelltes System, unser Anmeldesformular zum Erfolg, eine andere Seite in einem neuen Fenster.

Dies habe ich bisher versucht: Datei: Anwendungskontextsicherheit:

...
<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>
...

Benutzerdefinierte Anmeldecode (auf OK -Schaltfläche Klicken):

        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();

Probleme:

  1. Falsches Login: Es zeigt Erfolg und öffnet Popup mit Anmeldebildschirm !! (Offensichtlich war Anmeldung nicht erfolgreich, aber der Anmeldebildschirm konnte das nicht erkennen)
  2. Ich möchte die Werte in der Authentifizierungsanbieter nicht harten Code. Gibt es eine andere Möglichkeit, dass ich meine eigene Klasse zur Verfügung stelle? Ich habe mehrere Tutorials ausprobiert, aber vergebens, alle scheinen darauf hinzuweisen, dass ich den Frühling über eine Datenbank oder eine andere Art von Datei vergleiche, kann ich es nicht selbst tun?
War es hilfreich?

Lösung

Klingt für mich so, als müssten Sie Ihren eigenen BenutzerdetailsService schreiben. Dies ist die Spring Security -Schnittstelle, die die SecurityContext.getPrincipal () mit den Benutzerdetails bevölkert. Wenn dieses Objekt am Ende der Sicherheitsfilterkette nicht besiedelt wurde, wird der Spring eine Autorisierungsausnahme ausgelegt, die gefangen werden kann, und der Benutzer kann auf eine andere Seite/einen anderen Teil der Anwendung weitergeleitet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top