Аутентификация с помощью Jetty через кнопку GWT - PullRequest
3 голосов
/ 17 мая 2011

Я пытаюсь создать страницу входа в систему с помощью SmartGWT и пытаюсь заставить Аутентификацию по форме работать с сервером Jetty, встроенным в подключаемый модуль GWT для Eclipse.У меня есть страница, которая принимает имя пользователя и пароль с помощью TextItems, а затем, когда нажимается кнопка входа в систему, мне требуется аутентификация.

Я настроил свой файл jetty-web.xml для создания пользовательскогоцарство, которое в настоящее время ничего не делает, кроме как сказать мне, что его методы вызываются, просто я знаю, что это работает, так как, как только я попаду туда, я почти уверен, что смогу понять остальное.

jetty-web.xml

<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <Get name="SecurityHandler">
        <Call name="setUserRealm">
            <Arg>
                <New class="custom.realm.CustomRealm">
                    <Set name="name">CustomRealm</Set>
                </New>
            </Arg>
        </Call>

        <Call name="setAuthenticator">
            <Arg>
                <New class="org.mortbay.jetty.security.FormAuthenticator">
                    <Set name="loginPage">/login.html</Set>
                    <Set name="errorPage">/login.html</Set>
                </New>
            </Arg>
        </Call>
    </Get>
</Configure>

[править 05/18 13:16]

Мой CustomRealm расширяет HashUserRealm от Jetty, не знаю, может ли это вызвать проблемы, но решил, что я упомяну об этом.

Я также установил ограничение безопасности в своем файле web.xml

фрагмент web.xml

<security-constraint>
    <web-resource-collection>        
        <web-resource-name>Login</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <!-- <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint> -->

</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>CustomRealm</realm-name>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/login.html</form-login-page>
    </form-login-config>
</login-config>

Я довольно новичок в выполнении этого типапрочееЯ не уверен, что мне нужно ограничение.Это закомментировано, потому что, когда я его раскомментировал, страница вообще не загружалась.

Из того, что я прочитал, я понял, что при использовании ограничения безопасности с Jetty должно появиться диалоговое окно входа в браузер.,Это не то, чего я хочу, и на самом деле этого не происходит.Так что я не уверен в том, что я делаю там неправильно.

Я также нашел класс RequestBuilder в GWT, но, похоже, он ничего не делает.Мне нужна кнопка входа, чтобы как-то вызвать метод authenticate в моей пользовательской области.Мне интересно, есть ли способ сделать это?Или, по крайней мере, указывать в правильном направлении, потому что я искал и ничего не нашел.

заранее спасибо.

[править 05/18 8:56 утра] добавляя какМой RequestBuilder теперь настроен после предложения Питера

RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "login.html");
StringBuilder postData = new StringBuilder();
postData.append(URL.encode("j_username")).append("=").append(URL.encode(getUsername()));
postData.append("&");
postData.append(URL.encode("j_password")).append("=").append(URL.encode(getPassword()));
rb.setRequestData(postData.toString());
rb.setHeader("Content-type", "application/x-www-form-urlencoded");
rb.setCallback(new RequestCallback() {
    @Override
    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("Incorrect username or password entered. Please try again.");
        }
        else
        {
            System.out.println("IT WORKED!!!");
        }
    }

    @Override
    public void onError(Request request, Throwable exception)
    {
        Window.alert(exception.getMessage());
    }
});

try
{
    rb.send();
}
catch (RequestException e)
{
    SC.say(e.getMessage());
}

[re-update] Если ограничение auth не закомментировано, метод onModuleLoad никогда не вызывается.Кто-нибудь знает, почему он это делает?

...