2009-11-25 3 views
1

Мне нужно пройти аутентификацию пользователя на странице, основанной на помните меня, cookie, , вдохновленный этим сайтом: Tutorial for checking spring authentication, Я придумал решение для проверки подлинности ,с использованием запроса строителя для аутентификации пользователя: Не работает весной безопасности

Изменения, сделанные в моем приложении

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

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 простой пустой HTML-страницы, из что я понимаю, поскольку AuthenticationChecker.html требует роли в качестве администратора, я должен был получить 401 Unauthor если вы помните, что cookie не присутствовал, и 200 OK, если пользователь был аутентифицирован и его cookie присутствовал.

Однако выход всегда показывает: [успех (200, OK)]

перепроверить, я просто набрал authenticaionChecker.html (без регистрации), и он вернулся обратно в login.html о том, что весна действительно аутентифицировать пользователя.

Я делаю что-то неправильно здесь?

ответ

2

Если вы посмотрите на учебник, вы увидите, что 401 возвращается только при использовании базовой проверки подлинности. При аутентификации на основе форм вам необходимо проверить текст ответа на сообщение об ошибке. Например:

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

Спасибо, чувак, вы спасли мою жизнь !!! честно говоря, я не совсем понял разницу между базовой и основанной на формах аутентификацией . Предполагалось, что форма основана на форме:

Я действительно ценю ответ, матовый, спасибо за усилия! –