一.页面jsp实现方式
jsp引入shiro标签
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %>
将所需要展示的 菜单 li 使用shiro标签库进行包裹,如下所示
属性解释:
name=“org:add or org:delete or org:update” shiro必填属性,对应后面数据库中的权限,属性值为自定义
二,执行自定义realm获取当前用户权限
根据授权的登陆用户信息获取当前用户所属角色,以及角色对应的权限,代码如下
// 用于授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//从 principals获取主身份信息
//将getPrimaryPrincipal方法返回值转为真实身份类型(在上边的doGetAuthenticationInfo认证通过填充到SimpleAuthenticationInfo中身份类型),
PUser user = (PUser) principals.getPrimaryPrincipal();
//根据身份信息获取权限信息
//从数据库获取到权限数据
List<String> roleListPermission=null;
List<String> MenuListPPermission=null;
try {
roleListPermission = pUserService.findroleListByUserId(user.getId().toString());
MenuListPPermission = pUserService.findMenuListByUserId(user.getId().toString());
} catch (Exception e) {
e.printStackTrace();
}
//查到权限数据,返回授权信息(要包括 上边的permissions)
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
Set<String> setRoleListPermission=new HashSet<String>();
setRoleListPermission.addAll(roleListPermission);//给set填充
//将上边查询到授权信息填充到simpleAuthorizationInfo对象中
simpleAuthorizationInfo.setRoles(setRoleListPermission);
Set<String> setMenuListPPermission=new HashSet<String>();
setMenuListPPermission.addAll(MenuListPPermission);//给set填充
simpleAuthorizationInfo.setStringPermissions(setMenuListPPermission);;
// simpleAuthorizationInfo.addStringPermissions(MenuListPPermission);
return simpleAuthorizationInfo;
}
三,数据库涉及到的三张数据表
1.用户对应的角色表
p_user_role
2.角色对应的权限表
p_role_permission
3.具体的权限配置表
p_permission