学习 Shiro(一):初识 Shiro

更新至 Shiro 1.4.1 版本

Apache Shiro 是一个简单易用且功能强大的 Java 安全框架,提供了认证(Authentication)授权(Authorization)加密(Cryptography)会话管理的功能。

对比另一个安全框架 Spring Security,Shiro 更简洁也更通用。

Shiro Freature

Shiro 的核心特性包括:

  • 认证(Authentication)
  • 授权(Authorization)
  • 会话管理
  • 加密(Cryptography)

在核心特性的基础上,又提供了 Web 支持和缓存等特性。

认证(Authentication)

认证实际回答了 who are you 的问题。

实体(Subject)

实体代表了单个应用用户,维护了用户状态,提供了安全操作,包括认证(登录、登出)、鉴权(访问控制)和会话访问。

Subject currentUser = SecurityUtils.getSubject();  

认证 Token

通过提供主体(Principal)和凭证(Credential)完成身份认证过程。

主体,用于唯一确定实体。例如:用户名、邮箱、手机号。

凭证,用于证明实体身份。例如:密码、证书、指纹。

这也同样反映到认证 Token 接口 org.apache.shiro.authc.AuthenticationToken 的定义上:

public interface AuthenticationToken extends Serializable {

    Object getPrincipal();

    Object getCredentials();

}

认证过程

Authentication Steps

认证过程大致经历了以下几个步骤:

  1. 实体(Subject)使用认证 token 登录;
  2. Security Manager 执行登录操作;
  3. Security Manager 内部的 Authenticator 对 token 进行认证;
  4. Authenticator 调用 Realm 获取认证信息。;
  5. 如果存在多个 Realm,由 Authentication Strategy 决定是否认证成功。

授权(Authorization)

授权回答了 who has access to what 的问题。

Shiro 提供了三个核心元素实现了基于角色的访问控制(RBAC)

  • 权限(Permission)
  • 角色(Role)

权限(Permission)

权限本质上描述了资源(Resource)及实体可以与资源交互的行为(Action)。

例如:

  • 数据权限,是否允许查询数据库表?
  • 菜单权限,是否允许浏览菜单?
  • 操作权限,是否允许执行任务?

角色(Role)

角色通常代表了行为或责任的命名实体。

授权过程

Authorization Steps

授权过程大致经历了以下几个步骤:

  1. 实体判断是否拥有角色或权限;
  2. Security Manager 判断是否拥有角色或权限;
  3. Security Manager 内部的 Authorizer 判断是否拥有角色或权限;
  4. Authorizer 调用 Realm 获取权限信息。

参考