shiro處理許可權流程:
(1)把所有的許可權交給shiro管理 --createfilterchaindefinitionmap 可以體現處理
(2)在realm裡面 就要查詢當前使用者的許可權,如果這個許可權在shiro管理返回之內,這個使用者就有響應的許可權
否則就沒有
// 從資料庫啊查詢到所有的許可權 交給shiro管理
list
all = ipermissionservice.
findall()
;for
(permission permission : all)
如何體現將 map裡面的許可權交給shiro管理呢:
配置自定義許可權過濾器
自定義許可權過濾必須有 使用自定義的許可權過濾器必須有工廠bena的支援才能使用
<
!-- 真實的過濾器處理 id這個名字 必須和web.xml裡面配置的**的過濾器的名稱一樣,才行--
>
"shirofilter"
class
="org.apache.shiro.spring.web.shirofilte***ctorybean"
>
"securitymanager" ref=
"securitymanager"
>
<
/property>
<
!-- 如果沒有認證,會跳轉該頁面--
>
"loginurl" value=
"/login"
>
<
/property>
<
!--認證成功,跳轉的頁面--
>
"successurl" value=
"/main"
>
<
/property>
<
!--沒有許可權--
>
"unauthorizedurl" value=
"/s/unauthorized.jsp"
>
<
/property>
<
!--配置自定義過濾器--
>
"filters"
>
"aisellperms" value-ref=
"aisellpermsfilter"
>
<
/entry>
<
/map>
<
/property>
<
!--攔截配置--
>
"filterchaindefinitionmap" ref=
"filterchaindefinitionmap1"
>
<
/property>
<
/bean>
<
!-- 定義自定義過濾器--
>
"aisellpermsfilter"
class
="cn.itsource.aisell.shiro.aisellfilterchaindefinitionmapbuilder"
>
<
/bean>
<
!-- 配置兩個bean 引用map這個類 就動態的拿到了每個使用者的許可權--
>
"filterchaindefinitionmap1" factory-bean=
"filtermapfactoybean" factory-method=
"createfilterchaindefinitionmap"
>
<
/bean>
<
!-- 引用map這個類 就動態的拿到了每個使用者的許可權就能進行攔截和放行--
>
"filtermapfactoybean"
class
="cn.itsource.aisell.shiro.aisellfilterchaindefinitionmap"
>
<
/bean>
--sql語句查詢當前使用者的許可權
select p.* from employee e
join employee_role er on e.id = er.employee_id
join role r on er.role_id = r.id
join role_permission rp on rp.role_id = r.id
join permission p on p.id = rp.permission_id
where e.id =
2 jpql查詢語句
@query
("select p.sn from employee e join e.roles er join er.permissions p where e.id = ?1 "
)public set
findpermissionsbyloginuser
(long id)
;
當你前台登入後就會將登陸物件傳到後台來驗證 驗證結束後進入如此方法授權
protected authorizationinfo dogetauthorizationinfo
(principalcollection principalcollection)
為什麼會出現這個問題 shiro底層不會處理你ajax請求 所以你傳送ajax請求若是許可權不夠則 會彈出框 undefined (該提示並不能滿足我們的需求)
解決方式:
(1)寫乙個過濾器 覆寫permissionsauthorizationfilter
(2)重寫 onaccessdenied方法
方法裡面 就判斷如果是ajax請求 就直接返回json格式,
否則就走原來的格式,返回頁面
public
class
aisellfilterchaindefinitionmapbuilder
extends
permissionsauthorizationfilter
else")
;}else
else}}
return
false;}
}
<
!--配置自定義過濾器--
>
"filters"
>
"aisellperms" value-ref=
"aisellpermsfilter"
>
<
/entry>
<
/map>
<
!-- 定義自定義過濾器--
>
"aisellpermsfilter"
class
="cn.itsource.aisell.shiro.aisellfilterchaindefinitionmapbuilder"
>
<
/bean>
配置完畢後 還需要再傳送請求的時候找到自定義過濾器: 參見map裡面的配置
新增標籤來控制頁面的按鈕是否顯示 shiro會通過這個標籤自己判斷是否有許可權
// 引入標籤庫支援
<
%@ taglib prefix=
"shiro" uri=
""%>
"employee:delete"
>
"#" data-method=
"delete" plain=
"true"
class
="easyui-linkbutton" iconcls=
"icon-remove"
>刪除<
/a>
<
/shiro:haspermission>
需求:動態獲取選單根據使用者許可權顯示選單
寫了menu domain物件
public
class
menu
extends
basedomain
//setget...
}
public list
findmenubyloginuser
(long employeeid)
//通過父選單查詢出子選單 放到物件裡面去
parentmenu.
getchildren()
.add
(submenu)
;//[1,[2,3,4,5],6 [7,8]]
}return menus;
}
設定登陸許可權 根據許可權設定選單
shiro處理許可權流程 1 把所有的許可權交給shiro管理 createfilterchaindefinitionmap 可以體現處理 2 在realm裡面 就要查詢當前使用者的許可權,如果這個許可權在shiro管理返回之內,這個使用者就有響應的許可權 否則就沒有 從資料庫啊查詢到所有的許可權 ...
mysql 許可權設定 mysql 許可權設定
關於mysql的使用者管理,筆記 1 建立新使用者 通過root使用者登入之後建立 grant all privileges on to testuser localhost identified by 123456 建立新使用者,使用者名為testuser,密碼為123456 grant all ...
CVS許可權設定
關於許可權管理的操作,我感覺不錯的 假設有使用者1 lxw 使用者2 zxh 有使用者1的模組 lxwdir 使用者2的模組 zxhdir 要求 lxw 只能訪問lxwdir zxh只能訪問zxhdir 第1步,設定cvs的庫配置檔案 模組cvsroot 的訪問許可權 方法 建立超級使用者的工作目錄...