以前登入成功,傳的是username,現在傳主體employee物件
//身份認證
@override
protected authenticationinfo dogetauthenticationinfo(authenticationtoken authenticationtoken) throws authenticationexception
session是從subject獲取
存在shiro的session中後,httpsession也會有值
public class usercontext
//獲取到當前登入使用者
public static employee getuser()
}
儲存所有許可權過濾的資料都是從資料庫中獲取
@autowiredprivate
ipermissionservice permissionservice;public
mapcreatefilterchaindefinitionmap());
filterchaindefinitionmap.put("/**", "authc");
return filterchaindefinitionmap;
}
授權部分的資料也是從資料庫中獲得的
應該拿到當前登入使用者的所有許可權
permissionrepository
jpql關聯原則: 1.不寫on 2.關聯物件的別名.屬性
//根據使用者拿到他對應的所有許可權
@query("select distinct p.sn from employee e join e.roles r join r.permissions p where e.id = ?1")
setfindpermsbyuser(long userid);
permissionservice(呼叫略...)
jparealm
拿到當前登入使用者,再獲取它的許可權
@override
protected authorizationinfo dogetauthorizationinfo(principalcollection principalcollection)
shiro處理沒有許可權是跳轉頁面,而我們如果是ajax請求,我們希望是返回json資料 ajax請求會有乙個請求頭:x-requested-with: xmlhttprequest 需要自定義乙個shiro的許可權過濾器
public class aisellpermissionsauthorizationfilter extends permissionsauthorizationfilter else
resp.getwriter().print("");
}else else }}
return false;
}}
配置許可權過濾器
entry key=「aisellperms」:確定許可權過濾器的名稱
...
@autowiredprivate
ipermissionservice permissionservice;
public mapcreatefilterchaindefinitionmap());
...}
員工 -> 角色 -> 許可權 -> 選單
選單domain的自關連配置
需要配置雙向,但是不能讓jpa去管理一對多(我們自己管理:@transient)
雙向生成json會產生死迴圈,需要一邊進行忽略:@jsonignore
//讓它不再生成json
@manytoone(fetch = fetchtype.lazy)
@joincolumn(name = "parent_id")
@jsonignore
private menu parent;
// 臨時屬性 -> 這個欄位jpa就不管它了
@transient
private listchildren = new arraylist<>();
//easyui的樹需要乙個text屬性
public string gettext()
public inte***ce menurepository extends baserepository
根據設計只能通過員工找到子選單
需要通過子選單拿到父選單
判斷這個父選單是否已經存到集合中
如果這個菜單單沒有存起來,放到集合中 把當前這個子選單放到父選單中去
@overridepublic list
findloginmenu()
為這個父選單新增對應的子選單
parent.getchildren().add(child);
}return parentmenus;
}
@autowired
private imenuservice menuservice;
public listloginusermenu()
$('#menutree').tree({
url:'/util/loginusermenu',
...shiro:haspermission
沒有這個許可權,就不展示對應的按鍵
<%@ taglib prefix="shiro" uri="" %>
...刪除
選單的許可權
三層系統的選單的許可權問題 所謂選單,可以是c 做的選單,也可以是幾個js做的。下面是用js做的選單許可權 js的麵包屑導航 1.顯示層 1 準備三張 d1 1.jpg,d1 2.jpg,d1 3.jpg 用途 已登入顯示一張 未登入顯示一張 滑鼠懸停顯示一張。有許可權的選單 超連結 無許可權的選單...
選單的許可權
三層系統的選單的許可權問題 所謂選單,可以是c 做的選單,也可以是幾個js做的。下面是用js做的選單許可權 js的麵包屑導航 1.顯示層 1 準備三張 d1 1.jpg,d1 2.jpg,d1 3.jpg 用途 已登入顯示一張 未登入顯示一張 滑鼠懸停顯示一張。有許可權的選單 超連結 無許可權的選單...
許可權選單的設計
1.資源表 1.1 resource resourceid,resourcenamespace,description 1.2 category categoryid,name,parentid,description 1.3 module moduleid,name,url,description...