權限攔截 (攔截器: 對請求進行區分)
1 實作的價值(作用)
使用者未登入:通路沒用登入的URL,攔截到以後 跳轉回登入
使用者未登入:通路登入的URL,直接放行到後續流程處理架構,進行後續的操作
使用者登入: 通路擁有的權限 跳轉頁面并渲染
使用者登入: 通路沒有的權限 跳轉到沒有權限的錯誤頁面
權限攔截的研發步驟
1 實作HandlerInterceptor接口 有一個PreHandle方法
擷取Session中使用者 在擷取Request url
判定Session 和null 的關系
為空的情況沒有登陸時 跳轉到登陸頁面
在大配置中如果通路的是登陸url 不做攔截 使用的是Exclude 屬性。
不為空的情況 登陸後 分情況讨論放行
通路 hasUrl:放行并渲染
通路 hasNotURL : 攔截跳轉到 NoPermission 頁面
2 使用者登陸以後 通路 hasNotURL : 攔截跳轉到 NoPermission 頁面
if(hasPrivilegeByurl(url入參)){
retuen true;
}
3 UserInfo中
Public boolean hasOrivilegeByUrl(url入參){
// get all Permission from listener‘s area
List<String>list =null; ---Conver End
if(!list.contains(url)){
return true;// 他不能攔截本身預設擁有的權限 ,這些權限并沒有顯示在DB中進行存儲
}
//擷取到CurrentLoginUserPrivilege集合
疊代判定 有 :retuen true;
}
4 配置監聽器 全局的監聽器 SerbletContextListener
在容器啟動的時候 去給application 放入系統所有權限
5 web.xml 中 配置監聽器
配置法則 :spring 的監聽器一定配置在第一位。