2013-08-05 83 views
2

我正在開發使用RESTful作爲Web服務的Java Web應用程序。現在我想申請Apache Shiro來保護我的應用程序。其機制是:用戶登錄成功後,會將一個令牌(由用戶名,密碼和記錄時間組成)返回給客戶端。然後,每個REST請求都會附加此令牌以在服務器進行身份驗證(無需授權)。但現在我不知道如何配置來接受這一點。
順便說一句,你可以給我任何關於Shiro & RESTful集成的示例嗎?謝謝關於RESTful和Shiro集成的示例

回答

2

如果REST應用程序和Java Web應用程序是相同的webapp,那麼你只需要檢查subject.isAuthenticated()。使用沒有密碼或用戶名的會話cookie(因爲密碼可能被盜,所以傳遞密碼並不是個好主意)。

如果這兩個部件都在同一個Web應用程序中,這種行爲的大部分都是默認的。

在你的休息方法,你會碰到這樣的:

Subject subject = SecurityUtils.getSubject(); 
if(subject == null || !subject.isAuthenticated()) { 
    return 401; // Not Authorized 
} 

希望有所幫助。

+0

謝謝@Stephen。是的,Java Web應用程序和REST共享同一個Web應用程序。該會話cookie上的服務器進程上的身份驗證代碼。但我的REST應用程序是一個移動應用程序,所以我不確定我可以使用會話cookie。我更喜歡使用令牌(由用戶名和密碼生成),並將其附加在每個請求上。因此,我需要重新實施身份驗證步驟,並且無法重新使用舊的身份驗證步驟。 無論如何,你的提示可能會幫助我很多,我會試試這種方式。 –

0

除了上述的反應,您可以從您的REST服務器,後成功登錄發回一個令牌(會話ID)。然後,您的iOS/Android應用程序將需要存儲此信息,並將其發送給每個REST請求。這裏是您登錄後REST響應可以是什麼樣:

session-start-timestamp: 1394683755389, 
session-timeout: 1800000, 
session-id: "068C8E0E289788A7ABC5FE47B2CC0D28" 

會話ID會被你的REST服務器進行維護,其TTL將重置每一個具有此ID的新請求到來時

在瀏覽器上,此ID會自動發送。對於你的情況,你會想與每個HTTP請求明確發送(這是REST請求是什麼)

希望這有助於