4

ごく最近、Tapestry 5 を発見しました。ビューとコントローラーが明確に分離されており、XML の代わりに名前の標準化が使用されているため、すぐに使い始めました。率直に言って、変更するつもりはありませんが、ドキュメントだけでは十分ではありません。

私が取り組んでいるプロジェクトは、いくつかのタイプの役割をサポートできなければなりません。ユーザーの認証、役割に応じた特定のサービスの使用、および役割による URL へのアクセスを許可する必要があります。

いくつかの調査の後、Tynamo プロジェクトの一部であるTapestry-Securityに出会いました。

サービス レイヤーを Web アプリケーションから完全に独立させたいと考えています。これを使用して Web サービスやその他のものを実装するからです。いざという時に別の識別システムを作る気はありません。

私の問題は、Tapestry を使用せずに Tapestry-Security を使用する方法がわからないことです。Tapestry-Security ガイドに示されている例では、私には十分ではありません。私はそれがどのように機能するか、かなり大まかな考えを持っています。ただし、タペストリー 5 以外でどのように使用できるかはわかりません。

Tapestry 5 なしで Tapestry-Security を使用するにはどうすればよいですか?

また、Tapestry プロジェクトの AppModule クラスで使用されるフィルター システムも理解できません。AppModule がフィルター システムで動作する方法を説明するドキュメントはありますか?

私にそれらのことを説明したり、正しい方向に向けたりできる人はいますか?

ありがとう。

4

1 に答える 1

8

Tapestry-Security は、 Apache Shiroプロジェクトの上にある薄いレイヤーにすぎません。以下のみを提供します。

  • Tapestry アプリケーション モジュールを介して Shiro を構成する方法
  • タペストリーのページとアクションの実際のセキュリティ チェックを行う一連のタペストリー フィルタ
  • セキュリティを宣言的に宣言したい場合の注釈
  • .tmlファイルで条件付きレンダリングをサポートするコンポーネント

その層の下には、Shiro の通常のインスタンスがすべての作業を行っているため、Tapestry がまったく関与していない場合と同じように、セキュリティにアクセスできます (たとえば、SecurityUtilsクラスを介して)。

コメントに基づく編集:したがって、使用する Web アプリケーションで Shiro を使用できますが、Tapestry-Security は実際には Tapestry で使用するための単なるラッパーです。ただし、Tapestry と他のサーブレット (Web サービスなど) を含むアプリがある場合は、Tapestry-Security に初期化作業を行わせることができます。

Tapestry フィルターについて: 残念ながら 、これは十分に文書化されていません。Tapestry フィルターはサーブレット フィルターと非常によく似た働きをしますが、Tapestry はサーブレット フィルター自体として実装されるため、独自のフィルター チェーンを持ちます。Tapestry のフィルターは、R​​equestFilterインターフェイスを実装します。

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 に答える