utilizzando richiesta del costruttore per l'autenticazione utente: Non funziona nella sicurezza primavera
-
22-09-2019 - |
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?
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
}
}