2009-11-25 7 views
1

Je dois authentifier un utilisateur dans une page basée sur le cookie remember me, inspiré par ce site: Tutorial for checking spring authentication, J'ai trouvé une solution pour vérifier l'authentification .en utilisant le générateur de requêtes pour authentifier l'utilisateur: Ne fonctionne pas en sécurité de printemps

Les modifications apportées dans mon application

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"/> 

Code 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 est une page simple html vierge, de ce que je comprends, comme AuthenticationChecker.html nécessite un rôle d'administrateur, je devrais avoir un 401 Unauthor ized si rappelez-moi cookie n'était pas présent et un 200 OK si l'utilisateur était authentifié et son cookie était présent.

Cependant, la sortie montre toujours: [succès (200, OK)]

Pour recouper, je simplement typé authenticaionChecker.html (sans vous connecter) et retourné à login.html indiquant que le printemps est en effet authentifiant l'utilisateur.

Est-ce que je fais quelque chose de mal ici?

Répondre

2

Si vous regardez le didacticiel, vous verrez qu'un 401 n'est renvoyé que lorsque vous utilisez l'authentification de base. Avec l'authentification basée sur un formulaire, vous devez vérifier le texte de réponse pour un message d'erreur. Par exemple:

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 
    } 
} 
+0

Merci mon ami, vous m'avez sauvé la vie !!! honnêtement, je ne comprenais pas tout à fait la différence entre l'authentification basique et basée sur le formulaire une supposition éclairée serait que la forme basée serait de la forme:

J'apprécie vraiment la réponse donnée, mat, merci pour l'effort !! –

Questions connexes