Как я могу использовать 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 для выполнения реальных проверок безопасности страниц и действий Tapestry
  • аннотации, если вы хотите декларировать вашу безопасность декларативно
  • компоненты для поддержки условного рендеринга в вашем .tml файлы

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

Редактирование на основе комментариев. Таким образом, хотя вы можете использовать Shiro в любом веб-приложении, которое вы используете, Tapestry-Security на самом деле является просто оберткой для использования с Tapestry. Однако если у вас есть приложение, которое включает 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());
}

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

Другие вопросы по тегам