Как использовать Tapestry-Security?

Я обнаружил Tapestry 5, совсем недавно, его четкое разделение между представлением и контроллером, использование стандартизации имени вместо XML заставило меня пойти на это прямо. Честно говоря, я не планирую меняться, но документации для меня просто недостаточно.

Проект, над которым я работаю, должен поддерживать несколько типов ролей. Я должен разрешать пользователям аутентификацию, использование сертификационных сервисов в соответствии с их ролями и доступ к URL-адресам по их ролям.

После некоторого исследования я наткнулся на Tapestry-Security, который является частью проекта Tynamo.

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

Моя проблема в том, что я не вижу, как использовать Tapestry-Security без использования Tapestry. Пример, который они показывают в руководстве Tapestry-Security, для меня просто недостаточен. У меня есть довольно грубая идея, как это работает. Однако я не знаю, как я мог использовать его за пределами Гобелен 5.

Как я могу использовать Tapestry-Security без Tapestry 5?

Я также не понимаю фильтры, используемые в классе AppModule в проекте Tapestry. Есть ли документ, который объясняет, как AppModule работает с системой фильтрации?

Есть ли кто-нибудь, кто может объяснить мне эти вещи или указать мне в правильном направлении?

Спасибо.

2 ответа

Tapestry-Security - это всего лишь тонкий слой поверх Apache Shiro. Он предоставляет только:

  • способ настройки Shiro через ваш модуль приложения Tapestry.
  • набор фильтров Tapestry для выполнения фактических проверок безопасности для страниц и действий гобеленов
  • annotations, если вы хотите объявить свою безопасность декларативно
  • components для поддержки условного рендеринга в ваших файлах .tml

Под этим слоем есть обычный экземпляр Shiro, который выполняет всю работу, поэтому вы можете получить доступ к безопасности (например, через SecurityUtils class), как обычно, если бы Гобелен вообще не был вовлечен.

Изменить на основе комментария: поэтому, пока вы можете использовать Shiro в любом используемом вами веб-приложении, Tapestry-Security на самом деле просто обертка для использования с Tapestry. Если вы, однако, имеете приложение, которое включает в себя Гобелен вместе с другими сервлетами (например, веб-службу), вы должны позволить Tapestry-Security выполнять работу по инициализации.

Что касается фильтров Гобелена: я боюсь, что это не очень хорошо документировано. Фильтры гобеленов очень похожи на фильтры сервлетов, но поскольку Tapestry реализован как сам фильтр сервлетов, он имеет свою собственную цепочку фильтров. Фильтры для Tapestry реализуют интерфейс RequestFilter.

public class MyFilter implements RequestFilter {
 @Override
 public boolean service(final Request request, final Response response,
 final RequestHandler handler) throws IOException {
 ... //your code
 try {
 return handler.service(request, response);
 } finally {
 ... //your code
 }
 }
}

Вы можете добавить их в цепочку фильтров, внеся их в свой прикладной модуль:

public void contributeRequestHandler(
 final OrderedConfiguration<requestfilter> configurations) {
 configuration.add("MyFilter", new MyFilter());
}
</requestfilter>


Вы можете прочитать эту статью, чтобы понять, как фильтры используются в классе AppModule http://tapestryjava.blogspot.com/2009/12/securing-tapestry-pages-with.html

licensed under cc by-sa 3.0 with attribution.