Domanda

Ho bisogno di un'autenticazione personalizzata in primavera, dovrebbe essere una classe semplice che prende il nome utente e la password forniti da un utente e lo confronta con alcuni valori e sulla base di ciò che dovrebbe autenticare.

Stiamo utilizzando un sistema creato in GWT, il nostro modulo di accesso, in caso di successo, apre un'altra pagina in una nuova finestra.

Questo è quello che ho tentato finora: file: application-context Sicurezza:

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

Codice di accesso personalizzato (facendo clic sul pulsante OK):

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

I problemi:

  1. Accesso errato: mostra il successo e apre il popup contenente la schermata di accesso !! (ovviamente l'accesso non è riuscito ma la schermata di accesso non è stata in grado di rilevarlo)
  2. Non voglio codificare i valori nel provider di autenticazione, esiste un altro modo per fornire la mia classe? Ho provato diversi tutorial ma invano, tutti sembrano puntare su di me permettendo a Spring di fare il lavoro di confronto tramite un database o qualche altro tipo di file, non posso farlo da solo?
È stato utile?

Soluzione

Mi sembra che tu abbia bisogno di scrivere il tuo UserDetailsService. Questa è l'interfaccia di Spring Security che popola SecurityContext.getPrincipal () con UserDetails. Se, alla fine della catena del filtro di sicurezza, questo oggetto non è stato popolato, Spring genererà un'eccezione di autorizzazione che può essere rilevata e l'utente può essere reindirizzato a un'altra pagina / parte dell'applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top