⼗⼆、Shiro使⽤数据库表配置权限
Shiro作为权限控制框架,权限信息需要开发⼈员维护到数据库中,系统管理员根据需要将这些权限分配使⽤者,系统需要提供功能⽅便开发⼈员添加模块权限,系统管理员将权限分配给⾓⾊,再将⾓⾊分配给⽤户,⽤户登录系统时就可以使⽤⾃⼰分配的权限了。
Shiro硬编码测试权限过滤
GfShiroRealm中的权限过滤⽅法
//⾓⾊权限和对应权限添加
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection)
{
//获取登录⽤户名
String loginId= (String) PrimaryPrincipal();
//查询⽤户名称
IUser user = UserByLoginId(loginId);
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//判断是否为超级管理员
// if(IConstants.I_SYSTEM_USERID.Id()))
// {
// for (Permission AdminPerm()) {
// //添加权限
// simpleAuthorizationInfo.Permission());
// }
// }
/
/ else
{
//添加⾓⾊和权限
//部门与⾓⾊,⽤户与⾓⾊关系表对应实体类IOrgUserRole
List<DefaultOrgUserRole> roles = Id());
System.out.println(">>>>>>doGetAuthorizationInfo roles==="+roles);
simpleAuthorizationInfo.addStringPermission("url:org.action");
simpleAuthorizationInfo.addStringPermission("url:orgroot.action");
simpleAuthorizationInfo.addStringPermission("url:orgchild.action");
// for (DefaultOrgUserRole role:roles) {
// System.out.println(">>>>>>roleid==="+RoleId());
/
/ System.out.println(">>>>>>RoleId())==="+RoleId ()));
// for (String RoleId())) {
// System.out.println(">>>>>>perm==="+perm);
// //添加权限
// simpleAuthorizationInfo.addStringPermission(perm);
// }
// }
}
return simpleAuthorizationInfo;
}
如果去掉硬编码
simpleAuthorizationInfo.addStringPermission(“url:org.action”); simpleAuthorizationInfo.addStringPermission(“url:orgroot.action”); simpleAuthorizationInfo.addStringPermission(“url:orgchild.action”);再次访问,就出现⾮法访问
基于数据库授权
创建权限表
create table gf_permission(id varchar(32),
modulename varchar(100),
name varchar(100),
permission varchar(100));
初始化数据(模块的权限数据需要开发⼈员提供到系统)
insert into gf_permission(id,modulename,name,permission)
values('1','组织机构(部门)','部门页⾯','url:org.action');
insert into gf_permission(id,modulename,name,permission)
values('2','组织机构(部门)','加载根部门','url:orgroot.action');
insert into gf_permission(id,modulename,name,permission)
values('3','组织机构(部门)','加载下⼀级部门','url:orgchild.action');
创建⾓⾊权限中间表
create table gf_perm2role(id varchar(32),
permid varchar(32),
roleid varchar(32));
分配⾓⾊权限数据(⽣产环境系统管理员通过系统功能模块授权)查出等于⽤户所具有的⾓⾊ID
insert into gf_perm2role(id,permid,roleid) values('role1','1','role5263d75084e7');
insert into gf_perm2role(id,permid,roleid) values('role2','2','role5263d75084e7');
insert into gf_perm2role(id,permid,roleid) values('role3','3','role5263d75084e7');
权限类
import org.apache.shiro.authz.annotation.RequiresPermissions;
public class PermissionInfo {
private String id = null;
private String moduleName = null;//组织机构部门
private String name = null;//权限名称
private String permission = null;//对应到Controller上的注解名称 @RequiresPermissions("url:orgsave.action") public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getModuleName() {
return moduleName;
}
public void setModuleName(String moduleName) {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
}
权限⾓⾊中间表类
public class Perm2RoleInfo {
private String id = null;
private String permId = null;
private String roleId = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
shiro安全框架public String getPermId() {
return permId;
}
public void setPermId(String permId) {
this.permId = permId;
}
public String getRoleId() {
return roleId;
}
public void setRoleId(String roleId) {
}
}
Mybatis SQL
<!-- 权限表操作 -->
<insert id="savePermission" parameterType="com.gf.statusflow.def.PermissionInfo">
insert into gf_permission(id,modulename,name,permission)
values(#{id},#{moduleName},#{name},#{permission})
</insert>
<update id="updatePermission" parameterType="com.gf.statusflow.def.PermissionInfo">
update gf_permission set modulename=#{moduleName},name=#{name},permission=#{permission} where id=#{id}
</update>
<delete id="deletePermById" parameterType="String">
delete from gf_permission where id=#{id}
</delete>
<delete id="deletePermByModule" parameterType="String">
delete from gf_permission where modulename=#{moduleName}
</delete>
<select id="getPermission" resultType="com.gf.statusflow.def.PermissionInfo">
select * from gf_permission
</select>
<!-- 权限与⾓⾊中间表 -->
<insert id="savePerm2Role" parameterType="com.gf.statusflow.def.Perm2RoleInfo">
insert into gf_perm2role(id,permid,roleid)
values(#{id},#{permId},#{roleId})
</insert>
<delete id="deletePerm2RoleById" parameterType="String">
delete from gf_perm2role where id=#{id}
</delete>
<delete id="deletePerm2RoleByRoleId" parameterType="String">
delete from gf_perm2role where roleid=#{roleId}
</delete>
<select id="getPermByRoleId" resultType="String">
select p.permission from gf_perm2role p2r,gf_permission p
where p2r.permid=p.id leid=#{roleId}
</select>
Mapper层相关⽅法
/**
* Shiro权限相关Mybatis⽅法
*/
public void savePermission(PermissionInfo permission);
public void updatePermission(PermissionInfo permission);
public void deletePermById(@Param("id") String id);
public void deletePermByModule(@Param("moduleName") String id);
public List<PermissionInfo> getPermission();
/**
* ⾓⾊与权限中间表Mybatis⽅法
*/
public void savePerm2Role(Perm2RoleInfo p2r);
public void deletePerm2RoleById(@Param("id") String id);
public void deletePerm2RoleByRoleId(@Param("roleId") String roleId);
public List<String> getPermByRoleId(@Param("roleId") String roleId);
在OrgModelCtrl添加模块跳转代码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
热门文章
-
excel文字递增函数公式
2025-02-08 -
数字递增公式
2025-02-08 -
notepad 正则变量运算
2025-02-08 -
C++regex库常用函数及实例
2025-02-08 -
js正则表达式之前瞻后顾与非捕获分组
2025-02-08 -
indesign正则数字和英文之间的空格
2025-02-08 -
C#匹配中文字符串的4种正则表达式分享
2025-02-08 -
PHP正则表达式匹配中文字符
2025-02-08 -
匹配中文汉字的正则表达式介绍
2025-02-08 -
Python正则表达式如何进行字符串替换
2025-02-08 -
orcl中用正则表达式
2025-02-08 -
sql正则表达式excel
2025-02-08 -
dataframe正则表达式
2025-02-08 -
postgress sql正则
2025-02-08 -
el-upload accept 正则表达式
2025-02-08 -
半小时 正则表达式
2025-02-08 -
判断科学计数法的正则
2025-02-08 -
根据url判断静态资源的方法
2025-02-08 -
Java正则表达式-匹配正负浮点数
2025-02-08 -
替换模糊匹配正则-hive
2025-02-08
最新文章
-
一种基于正则表达式的DBC文件解析及报文分析方法[发明专利]
2025-02-08 -
能被5整除的十进制整数的正规表达式
2025-02-08 -
大于0小于等于1的正则表达式
2025-02-08 -
linux grep 26个字母
2025-02-08 -
java pattern 正则表达式
2025-02-08 -
掌握文本编辑器中的搜索和替换技巧
2025-02-08
发表评论