跳到主要内容

Shiro Realm

Realm 及相关对象

Realm

【Realm】及【Authorizer】部分都已经详细介绍过 Realm 了,接下来再来看一下一般真实环境下的 Realm 如何实现。

1、定义实体及关系

 

即用户– 角色之间是多对多关系,角色 – 权限之间是多对多关系;且用户和权限之间通过角色建立关系;在系统中验证时通过权限验证,角色只是权限集合,即所谓的显示角色;其实权限应该对应到资源(如菜单、URL、页面按钮、Java 方法等)中,即应该将权限字符串存储到资源实体中,但是目前为了简单化,直接提取一个权限表,【综合示例】部分会使用完整的表结构。

用户实体包括:编号 (id)、用户名 (username)、密码 (password)、盐 (salt)、是否锁定 (locked);是否锁定用于封禁用户使用,其实最好使用 Enum 字段存储,可以实现更复杂的用户状态实现。 角色实体包括:、编号 (id)、角色标识符(role)、描述(description)、是否可用(available);其中角色标识符用于在程序中进行隐式角色判断的,描述用于以后再前台界面显示的、是否可用表示角色当前是否激活。 权限实体包括:编号(id)、权限标识符(permission)、描述(description)、是否可用(available);含义和角色实体类似不再阐述。

另外还有两个关系实体:用户 – 角色实体(用户编号、角色编号,且组合为复合主键);角色 – 权限实体(角色编号、权限编号,且组合为复合主键)。

sql及实体请参考源代码中的 sql\shiro.sql 和 com.github.zhangkaitao.shiro.chapter6.entity 对应的实体。

2、环境准备

为了方便数据库操作,使用了 “org.springframework: spring-jdbc: 4.0.0.RELEASE” 依赖,虽然是 spring4 版本的,但使用上和 spring3 无区别。其他依赖请参考源码的 pom.xml。