4

我最近发现了 Tapestry 5,它在视图和控制器之间明确分离,使用名称标准化而不是 XML,这让我直截了当。坦率地说,我不打算改变,但文档对我来说还不够。

我正在做的项目必须能够支持多种类型的角色。我必须允许用户进行身份验证,根据他们的角色使用某些服务以及通过他们的角色访问 url。

经过一些研究,我遇到了Tapestry-Security,它是 Tynamo 项目的一部分。

我希望我的服务层完全独立于我的 Web 应用程序,因为我将使用它来实现 Web 服务和其他一些东西。时机成熟时,我不想再做一个识别系统。

我的问题是我看不到如何在不使用 Tapestry 的情况下使用 Tapestry-Security。他们在 Tapestry-Security 指南上显示的示例对我来说还不够。我有一个非常粗略的想法,它是如何工作的。但是我不知道如何在 Tapestry 5 之外使用它。

我如何在没有 Tapestry 5 的情况下使用 Tapestry-Security?

我也不了解 Tapestry 项目中 AppModule 类中使用的过滤器系统。是否有解释 AppModule 与过滤器系统一起工作的方式的文档?

有没有人可以向我解释这些事情或指出我正确的方向?

谢谢。

4

1 回答 1

8

Tapestry-Security 只是Apache Shiro项目之上的一个薄层。它只提供:

  • 一种通过 Tapestry 应用程序模块配置 Shiro 的方法
  • 一组 Tapestry 过滤器,用于对 Tapestry 页面和操作进行实际的安全检查
  • 如果您想以声明方式声明您的安全性,请使用注释
  • .tml支持文件中条件渲染的组件

在该层之下,有一个 Shiro 的普通实例完成所有工作,因此您可以像在完全不涉及 Tapestry 时通常那样访问安全性(例如通过SecurityUtils类)。

根据评论进行编辑:因此,虽然您可以在您使用的任何 Web 应用程序中使用 Shiro,但 Tapestry-Security 实际上只是与 Tapestry 一起使用的包装器。但是,如果您的应用程序包含 Tapestry 以及其他 servlet(例如 Web 服务),您应该能够让 Tapestry-Security 完成初始化工作。

关于 Tapestry 过滤器: 恐怕这没有很好的记录。Tapestry 过滤器的工作方式与 Servlet 过滤器非常相似,但由于 Tapestry本身是作为 Servlet 过滤器实现的,因此它有自己的过滤器链。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());
}
于 2010-08-22T12:19:31.790 回答