shiro五个概念

  • Subject 是安全领域术语,除了代表人,它还可以是应用。在单应用中,可将其视为 User 的同义词。

  • Principal 是 Subject 的标识,一般情况下是唯一标识,比如用户名。

  • RolePermission 分别代表了不同粒度的权限,从上图中可以看出 Role 的粒度更大些,Permission 代表了系统的原子权限,比如数据的修改、删除权限。对于简单的权限应用,可以不需要 Permission。

  • Realm 是一个执行者,负责真正的认证和鉴权。


实现应用的安全模块的关键在于:定义合适的 role 和 permission,这就需要遵循如下原则:

role 没有实质内容,只是代表一组 permission,目的是为了管理的方便,一般都是动态定义;

permission 一般都是预先定义好的,不允许动态改变,除非源代码改动,它才会变化,它是整个安全模块的基础;

要使 permission 也能动态定义,并非不可能,但是这将使鉴权非常复杂,甚至可能导致鉴权语句遍布整个程序,得不偿失;

当然有一个例外:如果知道 permission 动态定义的规则和鉴权规则,如 Grails 的 fileter 中“${controllerName}:${actionName}:${params.id}”也可实现 permission 的动态定义


====END====


你可能感兴趣的:(shiro五个概念)