天天看點

shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我

針對項目資源或者角色授權需要頻繁查詢資料庫,需要使用shiro緩存。

shiro中提供了對認證資訊和授權資訊的緩存。shiro預設是關閉認證資訊緩存的,對于授權資訊的緩存shiro預設開啟的。主要研究授權資訊緩存,因為授權的資料量大。

使用者認證通過。

該 使用者第一次授權:調用realm查詢資料庫

該 使用者第二次授權:不調用realm查詢資料庫,直接從緩存中取出授權資訊(權限辨別符)。

在配置檔案中得配置緩存管理器

shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我

如果使用者正常退出,緩存自動清空。

如果使用者非正常退出,緩存自動清空。(現在版本的shiro都是支援這個的,是以這個我們不用管了)

如果修改了使用者的權限,而使用者不退出系統,修改的權限無法立即生效。

需要手動進行程式設計實作:

在權限修改後調用realm的clearcache方法清除緩存。

下邊的代碼正常開發時要放在service中調用。

在service中,權限修改後調用realm的方法。

在realm中定義clearcached方法:

然後在service中調用clearcached。比如授權資訊變化的時候,一般情況下,我們不清緩存的話就要等待緩存失效之後,我們的修改才會生效。是以這個清緩存的操作一般用在我們修改了使用者的權限之後,我們想讓這個修改立即生效。

和shiro整合後,使用shiro的session管理,shiro提供sessiondao操作 會話資料。

配置sessionmanager

shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我

shiro使用formauthenticationfilter進行表單認證,驗證校驗的功能應該加在formauthenticationfilter中,在認證之前進行驗證碼校驗。

需要寫formauthenticationfilter的子類,繼承formauthenticationfilter,改寫它的認證方法,在認證之前進行驗證碼校驗。

shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我
shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我
shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我

然後記得在前台頁面加上驗證碼,還有在filter配置匿名通路驗證碼jsp。

使用者登陸選擇“自動登陸”本次登陸成功會向cookie寫身份資訊,下次登陸從cookie中取出身份資訊實作自動登陸。

使用者身份實作java.io.serializable接口,向cookie記錄身份資訊需要使用者身份資訊對象實作序列化接口,如下:

shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我
shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我
shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我
shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我

測試也很好測,自動登陸後,需要檢視 cookei是否有rememberme

如果設定記住我,下次通路某些url時可以不用登陸。将記住我即可通路的位址配置讓userfilter攔截。

shiro+ehcache緩存 和 驗證碼 和 記住我shiro緩存驗證碼記住我