utilizzando richiesta del costruttore per l'autenticazione utente: Non funziona nella sicurezza primavera

StackOverflow https://stackoverflow.com/questions/1795474

Domanda

Ho bisogno di autenticare un utente in una pagina in base al cookie ricordati di me, ispirato da questo sito: Tutorial per il controllo di primavera l'autenticazione , Mi si avvicinò con una soluzione per il controllo della autenticazione.

Le modifiche apportate nella mia applicazione

applicationContext-security.xml:

<intercept-url pattern='/**AuthenticationChecker.html' access="ROLE_ADMIN"/>
...
<form-login login-page="/Login.html" authentication-failure-url="/Login.html" always-use-default-target="true" default-target-url="/Main.html"/>

Codice Gwt:

try
{
    RequestBuilder rb = new RequestBuilder(
    RequestBuilder.POST, "AuthenticationChecker.html");
            rb.sendRequest(null, new RequestCallback() 
            {
                public void onError(Request request, Throwable exception)
                {
                    RootPanel.get().add(new HTML("[error]" + exception.getMessage()));
                }
                public void onResponseReceived(Request request, Response response)
                {
                    RootPanel.get()
                   .add(new HTML("[success (" + response.getStatusCode() + "," + response.getStatusText() + ")]"));
                }
            }
    );
}
catch (Exception e)
{
    RootPanel.get().add(new HTML("Error sending request " + e.getMessage()));
}

AuthenticationChecker.html è una semplice pagina html vuota, da quanto ho capito, come AuthenticationChecker.html richiede ruolo di amministratore, avrei ottenuto un 401 non autorizzato se mi ricordo cookie non era presente e un 200 OK se l'utente è stato autenticato e il suo biscotto era presente.

Tuttavia, l'output mostra sempre: [successo (200, OK)]

Per attraversare controllo, semplicemente digitato authenticaionChecker.html (senza login) ed è tornato indietro a login.html indicando che molla è infatti l'autenticazione dell'utente.

sto facendo qualcosa di sbagliato qui?

È stato utile?

Soluzione

Se si guarda il tutorial, vedrai che una 401 viene restituito solo quando si utilizza l'autenticazione di base. Con l'autenticazione basata su form, è necessario controllare il testo di risposta per un messaggio di errore. Ad esempio:

public void onResponseReceived(Request request, Response response) {
    if (response.getStatusCode() != Response.SC_OK) {
        onError(request, new RequestException(response.getStatusText() + ":\n" + response.getText()));
        return;
    }

    if (response.getText().contains("Access Denied")) {
        Window.alert("You have entered an incorrect username or password. Please try again.");
    } else {
        // authentication worked, show a fancy dashboard screen
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top