Способ, предоставленный платформой, заключается в предоставлении экземпляра 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());
}
}
});