2010-08-22 57 views
4

我發現了Tapestry 5,最近,它在視圖和控制器之間的清晰分離,使用名稱標準化而不是XML使我直接找到它。坦率地說,我不打算改變,但文件對我來說還不夠。如何使用Tapestry-Security?

我正在處理的項目必須能夠支持多種類型的角色。我必須允許用戶驗證,根據角色使用某些服務以及通過角色訪問url。

經過一番研究,我遇到了Tapestry-Security這是Tynamo項目的一部分。

我希望我的服務層完全獨立於我的Web應用程序,因爲我會用它來實現Web服務和其他一些東西。到時候我不想再做一個識別系統。

我的問題是,我沒有看到如何使用Tapestry-Security而不使用Tapestry。他們在Tapestry-Security指南中顯示的例子對我來說是不夠的。我有一個非常粗略的想法,它是如何工作的。 但是我不知道如何在Tapestry 5之外使用它。

如何在不使用Tapestry 5的情況下使用Tapestry-Security?

我也不明白在Tapestry項目的AppModule類中使用的過濾器系統。 是否有解釋AppModule與過濾系統配合使用的文檔?

有沒有人可以解釋我的這些事情或指向正確的方向?

謝謝。

回答

8

Tapestry-Security只是Apache Shiro項目之上的一個薄層。它只提供:

  • 的方式通過您的Tapestry應用模塊配置四郎
  • 一套掛毯過濾器做了Tapestry頁面實際的安全檢查和操作
  • annotations你想申報安全聲明
  • components支持有條件的呈現在你的.tml文件

在其下方層,有是Shiro的所有工作的普通例子,因此,如果Tapestry完全不參與,您可以像通常那樣訪問安全性(例如,通過SecurityUtils課程)。

編輯根據評論:因此,雖然你可以在任何使用Web應用程序中使用Shiro,但Tapestry-Security實際上只是Tapestry的一個包裝。但是,如果您的應用程序包含Tapestry以及其他servlet(例如Web服務),您應該可以讓Tapestry-Security執行初始化工作。

關於掛毯過濾器:恐怕這沒有很好的記錄。 Tapestry過濾器的工作方式與Servlet過濾器非常相似,但是Tapestry過濾器是implemented as a Servlet Filter itself,它有自己的過濾器鏈。 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()); 
} 
+0

非常感謝你。 這是否意味着tapestry-security可以在沒有Tapestry體系結構的情況下使用,但是我需要在任何應用程序中添加Tapestry-Security過濾器?或者我應該在我的服務層中使用Shiro,然後在我的Web應用程序中使用Tapestry-Security來初始化它? 我在過濾器上得到了一個觀點,我猜想實現RequestFilter接口並通過添加它的貢獻方法將它添加到AppModule類中,允許我擴展Tapestry功能。 – lollancf37 2010-08-22 13:55:30

+0

@ lollancf37:我已經更新了我的答案。關於過濾器:是的,這就是他們的目的。 – Henning 2010-08-22 14:25:51

+0

非常感謝,我現在明白了很多。 – lollancf37 2010-08-22 16:08:47