Usando o solicitante construtor para autenticar o usuário: não funcionando em segurança da primavera

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

Pergunta

Preciso autenticar um usuário em uma página com base no biscoito Remember Me, inspirado neste site: Tutorial para verificar a autenticação da primavera, Criei uma solução para verificar a autenticação.

Alterações feitas no meu aplicativo

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

Código 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 é uma página HTML em branco simples, pelo que eu entendo, como autenticaçãoChecker.html requer função como administrador, eu deveria ter recebido um 401 não autorizado se me lembrar de mim, cookie não estava presente e um ok de 200 se o usuário fosse autenticado e seu cookie estava presente.

No entanto, a saída sempre mostra: [Sucesso (200, OK)

Para verificação cruzada, eu simplesmente digitei autenticaionchecker.html (sem fazer login) e ele voltou ao login.html indicando que a mola está realmente autenticando o usuário.

Estou fazendo algo errado aqui?

Foi útil?

Solução

Se você olhar para o tutorial, verá que um 401 só será retornado quando estiver usando a autenticação básica. Com autenticação baseada em formulário, você deve verificar o texto da resposta para uma mensagem de erro. Por exemplo:

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
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top