1

我需要基于记住我的 cookie 对页面中的用户进行身份验证,受此站点的启发:Tutorial for checks 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"/>

重量代码:

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 需要管理员角色,如果记住我的 cookie 不存在,我应该得到 401 Unauthorized ,如果用户通过身份验证并且他的 cookie 得到 200 OK在场。

但是,输出总是显示:[success (200,OK)]

为了交叉检查,我只是输入了authenticaionChecker.html(没有登录),它返回到Login.html,表明spring确实在验证用户。

我在这里做错了吗?

4

1 回答 1

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
    }
}
于 2009-11-25T09:04:01.780 回答