Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Wicket.docx
Скачиваний:
7
Добавлен:
23.03.2015
Размер:
68.23 Кб
Скачать

Разграничение прав доступа

Задача разграничения прав доступа возникает перед разработчиками весьма часто. Библиотека Wicket помогает решить проблему с минимальными трудозатратами. Для поддержки сессий пользователей в библиотеке используется класс WebSession. Расширим возможности этого класса:

public class AppSession extends WebSession

{

private Account account;

public AppSession(wicket.Application application)

{

super(application);

}

public void setAccount(Account account)

{

this.account = account;

}

public boolean isAuthenticated()

{

returnaccount !=null;

}

}

Класс Account содержит сведения о пользователе. Будем считать, что если значение атрибута account установлено, пользователь имеет право доступа к странице. Теперь необходимо заставить приложение создавать класс AppSession вместо стандартного класса WebSession. Для этого переопределим в классе Application метод getSessionFactory().

public class Application extends WebApplication

{

public ISessionFactory getSessionFactory()

{

return new ISessionFactory()

{

public Session newSession()

{

return new AppSession(Application.this);

}

};

}

}

И, напоследок, изменим класс BasicPage таким образом, чтобы при обращении к странице возможность доступа проверялась автоматически. Для этого должен быть перекрыт метод checkAccess() класса WebPage таким образом, чтобы производился автоматический переход на страницу LoginPage, если пользователь не опознан.

public class BasicPage extends WebPage

{

...

public AppSession getAppSession()

{

return (AppSession) getSession();

}

protected boolean checkAccess()

{

if (!getAppSession().isAuthenticated())

{

redirectToInterceptPage(newPage(LoginPage.class));

return false;

}

returntrue;

}

}

Локализация приложений

Библиотека Wicket использует общепринятый на платформе Java подход для локализации приложений через ресурсные файлы. Например, чтобы страница AddPersonPage могла отображать сообщения на ошибках на немецком языке, достаточно создать файл AddPersonPage_de_DE.properties с альтернативными значениями констант. При помощи класса StringResourceModel значения для констант будут выбираться из ресурсного файла, соответствующего текущему языку приложения. Переключение языка возможно путем вставки в Java-код следующей строки:

getSession().setLocale(new Locale("de", "DE"));

Кроме того, Wicket позволяет локализовать страницы на уровне файлов разметки. Например, для поддержки германской версии страницы AddPersonPage, можно создать дополнительный файл разметки AddPersonPage_de_DE.html. Для локализации графических изображений должен быть использован компонент Image.

Изменение поведения системы

Библиотека Wicket предоставляет разработчику широкие возможности по расширению и переопределению поведения системных классов. Рассмотрим возможности библиотеки на примере изменения страницы вывода сообщений о системных ошибках. По умолчанию используется страница, содержащая сведения о произошедшей ошибке и о возможных причинах ее возникновения. Создавая дружественный интерфейс, разработчики иногда скрывают детальную, но бесполезную для конечного пользователя информацию об ошибке, сохраняя данные в журнальном файле или передавая их администратору по электронной почте. Решая данную задачу средствами Wicket, необходимо создать страницу ErrorPage, имеющую класс-контроллер следующего вида.

public class ErrorPage extends WebPage

{

public ErrorPage(Page page, RuntimeException ex)

{

// Обработка ошибок

}

public boolean isErrorPage()

{

returntrue;

}

}

Затем нужно переопределить стандартный обработчик ошибок в классе Application:

public class Application extends WebApplication

{

protected Page onRuntimeException(Page page, RuntimeException e)

{

return new ErrorPage(page, e);

}

}

Вывод

При прочтении данной статьи сведущие программисты наверняка могли отметить тот факт, что авторы Wicket позаимствовали немало технических решений из таких известных средств разработки, как Tapestry и Swing. Действительно, это так. Привлекательность Wicket заключается в том, что идеи эти были творчески переработаны таким образом, чтобы максимально упростить процесс разработки приложений. В Wicket нет сложных дескрипторов компонентов, характерных для Tapestry. Библиотека Wicket не копирует Swing в точности, это было бы излишним при разработке Web-приложений. Повторное использование шаблонов разметки организовано проще и совершеннее, чем в Velocity и Struts Tiles. Сами файлы разметки создаются с использованием стандартных тегов HTML. Такой подход, во-первых, дает разработчикам больше свободы, чем подход, реализованный в JSF или Echo2, а во-вторых, позволяет распределить работу между Web-дизайнерами и разработчиками максимально удобным способом. Авторы заложили в Wicket средства для решения ряда типовых задач. Анализируя все эти факторы, можно смело утверждать, что Wicket является одним из наиболее интересных и перспективных средств компонентно-ориентированной Web-разработки на платформе Java.

Список использованной литературы:

  1. Материал из Википедии — свободной энциклопедии.

  2. Java development – Wicket первое знакомство. Сайт: http://anpetrov.blogspot.com/2010/03/wicket.html

  3. Сайт: http://www.rsdn.ru/article/inet/Wicket.xmlСтатья Вячеслава Скорых из источника: RSDN Magazine #5-2005