天天看點

shiro與SSM項目整合

<a href="http://download.csdn.net/detail/bug_moving/9738002">shiro于ssm整合所有的jar包</a>

在web系統中,shiro也通過filter進行攔截。filter攔截後将操作權交給spring中配置的filterchain(過慮鍊兒)

shiro提供很多filter。

shiro與SSM項目整合

在applicationcontext-shiro.xml 中配置web.xml中fitler對應spring容器中的bean。

shiro與SSM項目整合

對靜态資源設定逆名通路:

修改applicationcontext-shiro.xml

shiro與SSM項目整合

使用formauthenticationfilter過慮器實作 ,原理如下:

将使用者沒有認證時,請求loginurl進行認證,使用者身份和使用者密碼送出資料到loginurl

formauthenticationfilter攔截住取出request中的username和password(兩個參數名稱是可以配置的)

formauthenticationfilter調用realm傳入一個token(username和password)

realm認證時根據username查詢使用者資訊(在activeuser中存儲,包括 userid、usercode、username、menus)。

如果查詢不到,realm傳回null,formauthenticationfilter向request域中填充一個參數(記錄了異常資訊)

在登入頁面中,由于formauthenticationfilter的使用者身份和密碼的input的預設值(username和password),修改頁面的賬号和密碼 的input的名稱為username和password

shiro與SSM項目整合

在applicationcontext-shiro.xml中配置

shiro與SSM項目整合

不用我們去實作退出,隻要去通路一個退出的url(該 url是可以不存在),由logoutfilter攔截住,清除session。

在applicationcontext-shiro.xml配置logoutfilter

shiro與SSM項目整合

使用permissionsauthorizationfilter

在applicationcontext-shiro.xml中配置url所對應的權限。

測試流程:

1、在applicationcontext-shiro.xml中配置filter規則

2、使用者在認證通過後,請求/items/queryitems.action

3、被permissionsauthorizationfilter攔截,發現需要“item:query”權限

4、permissionsauthorizationfilter調用realm中的dogetauthorizationinfo擷取資料庫中正确的權限

5、permissionsauthorizationfilter對item:query 和從realm中擷取權限進行對比,如果“item:query”在realm傳回的權限清單中,授權通過。

1、在applicationcontext-shiro.xml中配置過慮器連結,需要将全部的url和權限對應起來進行配置,比較發麻不友善使用。

2、每次授權都需要調用realm查詢資料庫,對于系統性能有很大影響,可以通過shiro緩存來解決。

過濾器簡稱 對應的java類

資料庫中存儲到的md5的散列值,在realm中需要設定資料庫中的散列值它使用雜湊演算法 及散列次數,讓shiro進行散列對比時和原始資料庫中的散列值使用的算法 一緻。

shiro與SSM項目整合

修改realm的dogetauthorizationinfo,從資料庫查詢權限資訊。

使用注解式授權方法。

使用jsp标簽授權方法。

對系統中類的方法給使用者授權,建議在controller層進行方法授權。

在springmvc.xml中配置

shiro與SSM項目整合
shiro與SSM項目整合

jsp頁面添加:

标簽名稱 标簽條件(均是顯示标簽内容)

修改itemslist.jsp頁面

shiro與SSM項目整合

當調用controller的一個方法,由于該 方法加了@requirespermissions(“item:query”) ,shiro調用realm擷取資料庫中的權限資訊,看”item:query”是否在權限資料中存在,如果不存在就拒絕通路,如果存在就授權通過。

當展示一個jsp頁面時,頁面中如果遇到<code>&lt;shiro:haspermission name="item:update"&gt;</code>,shiro調用realm擷取資料庫中的權限資訊,看item:update是否在權限資料中存在,如果不存在就拒絕通路,如果存在就授權通過。

問題:隻要遇到注解或jsp标簽的授權,都會調用realm方法查詢資料庫,需要使用緩存解決此問題。