Как вы защищаете паролем страницу с помощью Wicket? - PullRequest
4 голосов
/ 25 мая 2010

Я хочу защитить паролем веб-страницу в Wicket, чтобы пользователь мог получить к ней доступ, только если он / она вошел в систему.

Мне также хотелось бы, чтобы на странице отображалась страница входа, а затем после входа на исходную страницу пользователь пытался добраться до нее.

Как это сделать с калиткой? Я уже создал страницу входа и расширил класс сеанса.

1 Ответ

7 голосов
/ 25 мая 2010

Способ, предоставленный платформой, заключается в предоставлении экземпляра IAuthorizationStrategy для вашего приложения, например, путем добавления в приложение метода init():

init() {
    ...
    getSecuritySettings().setAuthorizationStrategy(...)
}

Рабочий пример калиткифункция авторизации доступна на Wicket Stuff здесь , что демонстрирует некоторые довольно сложные вещи.Для действительно простых случаев взгляните на SimplePageAuthorizationStrategy .На самом базовом уровне это можно использовать следующим образом (взято из связанного Javadoc):

SimplePageAuthorizationStrategy authorizationStrategy = new SimplePageAuthorizationStrategy(
    MySecureWebPage.class, MySignInPage.class)
 {
        protected boolean isAuthorized()
        {
            // Authorize access based on user authentication in the session
            return (((MySession)Session.get()).isSignedIn());
        }
 };
 getSecuritySettings().setAuthorizationStrategy(authorizationStrategy);

Изменить в ответ на комментарий

Я думаю, что лучшепуть вперед, если вы просто собираетесь использовать что-то вроде SimplePageAuthorizationStrategy, а не сам этот класс.Я сделал что-то вроде этого для захвата страниц, аннотированных пользовательской аннотацией:

IAuthorizationStrategy authorizationStrategy = new AbstractPageAuthorizationStrategy()
 {
        protected boolean isPageAuthorized(java.lang.Class<Page.class> pageClass)
        {
            if (pageClass.getAnnotation(Protected.class) != null) {
                return (((MySession)Session.get()).isSignedIn());
            } else {
                return true;
            }
        }
 };

Затем вам нужно зарегистрировать IUnauthorizedComponentInstantiationListener , аналогично тому, что делается в SimplePageAuthorizationStrategy (ссылка на исходный код), который должен выглядеть примерно так:

new IUnauthorizedComponentInstantiationListener()
{
    public void onUnauthorizedInstantiation(final Component component)
    {
    if (component instanceof Page)
    {
        throw new RestartResponseAtInterceptPageException(MySignInPage.class);
    }
    else
    {
        throw new UnauthorizedInstantiationException(component.getClass());
    }
    }
});
...