shiro框架基础知识

简介

  Shiro是java的一个安全框架。可以帮助我们完成:认证、授权、加密、会话管理、与web集成、缓存等功能。
  Shiro不会去维护用户、维护权限,需要我们自己去提供设计,然后通过相应接口注入给shiro。

身份验证

  在shiro中,用户需要提供principals(身份)credentials(证明),从而验证用户身份。

  1. principals: 身份,及主体的标识属性,唯一即可。一个主题可以有多个principals,但是只能拥有一个primary principal。
  2. credentials: 证明/凭证,只有主体知道的安全值。如密码/数字证书等

授权

主体

  即访问应用的用户,在shiro中使用Subject代表该用户,用户只有在授权后才允许访问相应的资源。

资源

  在应用中用户可以访问的任何东西,比如:页面,查看/编辑数据,访问某个业务方法、打印文本等。用户只有授权后才能访问。

权限

  安全策略中的原子授权单位,权限代表在用户中能不能访问某个资源。
Shiro支持粗颗粒权限(如用户模块的所有权限)和细颗粒权限(操作某个用户的权限)。

角色

  角色代表了操作集合,可以理解为权限的集合,一般情况下,我们会赋予用户角色而不是权限。

隐式角色

  直接通过角色来验证用户有没有操作权限。粒度是以角色为单位进行访问控制的,粒度较粗;如果进行修改可能造成多处代码修改。

显示角色

  在程序中通过权限控制水能访问某个资源,角色聚合一组权限集合。粒度是以资源/实例为单位的,粒度较细。

Permission

字符通配符权限

  规则:“资源通配符:操作:对象实例id” ,即对那个资源可以进行什么操作。“:”代表资源/操作/实例的分割;“,”表示操作的分割;“*”表示任意资源/操作/实例。

性能问题

  可以考虑配合缓存来提供其性能,如果这样性能还打不到要求,我们可以实现位操作算法实现性能更好的权限匹配。也可以考虑在sql查询的时候加上权限字符串以在查询时就完成权限匹配。