2013-02-10 127 views
4

Apache Shiro文檔暗示了一些用於捕獲連續失敗登錄嘗試(除其他外)的所需功能,但是我找不到具體的文檔。目前我可以執行currentUser.login(token);無效的無限次數,不會陷入並拋出這個錯誤。我正在努力尋找源代碼在哪裏實現。如何爲Apache Shiro配置threashold過度失敗登錄嘗試?

這是真的有用嗎?是否在shiro.ini中配置了閾值?任何人都可以指向我的文檔(或確認它不存在)?

感謝

環境細節:四郎核心1.2.1和JDBC領域

開始文檔 步驟3:處理成功或失敗 如果登錄方法悄悄地返回,這就是它 - 我們就大功告成了!主題已通過身份驗證。應用程序線程可以繼續不間斷地進行,所有對SecurityUtils.getSubject()的進一步調用都將返回經過身份驗證的Subject實例,並且對subject.isAuthenticated()的任何調用都將返回true。

但是如果登錄嘗試失敗會發生什麼?例如,如果最終用戶提供了不正確的密碼,或者訪問了系統太多次並且他們的帳戶被鎖定了,該怎麼辦?

Shiro具有豐富的運行時AuthenticationException層次結構,可以準確指示嘗試失敗的原因。你可以在try/catch塊中包裝登錄,並捕獲你希望的任何異常,並相應地對它們做出反應。例如:

try { 
    currentUser.login(token); 
} catch (UnknownAccountException uae) { ... 
} catch (IncorrectCredentialsException ice) { ... 
} catch (LockedAccountException lae) { ... 
} catch (**ExcessiveAttemptsException** eae) { ... 
} ... catch your own ... 
} catch (AuthenticationException ae) { 
    //unexpected error? 
} 

//No problems, continue on as expected... 

如果現有的異常類的一個不符合您的需要,可以創建自定義AuthenticationExceptions代表具體的故障場景 //沒有問題,繼續如預期... 完文件建立

回答

8

如果你只是簡單地用Google搜索ExcessiveAttemptsException,在second link,你會發現從萊斯黑茲爾伍德,四郎筆者的答案:

無論如何,這存在例外,但我在Shiro的任何 點都不會拋出/管理。它可以作爲一種便利使用,所以如果你不想創建自己的Exception類,你就不需要創建自己的Exception類。 您需要實例化並在適當的時候將其置於您領域的 doGetAuthenticationInfo方法中。 Shiro 無法自動執行此操作的原因是這種類型的邏輯(在特定的幾分鐘內鎖定帳戶 一定次數後)通常完全取決於您的應用程序的用戶數據模型。