其他分享
首页 > 其他分享> > 初识shiro

初识shiro

作者:互联网

image

简介

Shiro是一个强大的简单易用的Java安全框架,主要用来更便捷的认证授权加密会话管理。Shiro首要的和最重要的目标就是容易使用并且容易理解

Shiro是一个有许多特性的全面的安全框架,下面这幅图可以了解Shiro的特性:

image

可以看出shiro除了基本的认证,授权,会话管理,加密之外,还有许多额外的特性。

Shiro架构

Shiro有三个主要的概念:SubjectSecurityManagerRealms
image

身份认证流程

img

流程如下:

  1. 首先调用 Subject.login(token) 进行登录,其会自动委托给 Security Manager,调用之前必须通过 SecurityUtils.setSecurityManager() 设置;
  2. SecurityManager 负责真正的身份验证逻辑;它会委托给 Authenticator 进行身份验证;
  3. Authenticator 才是真正的身份验证者,Shiro API 中核心的身份认证入口点,此处可以自定义插入自己的实现;
  4. Authenticator 可能会委托给相应的 AuthenticationStrategy 进行多 Realm 身份验证,默认 ModularRealmAuthenticator 会调用 AuthenticationStrategy 进行多 Realm 身份验证;
  5. Authenticator 会把相应的 token 传入 Realm,从 Realm 获取身份验证信息,如果没有返回 / 抛出异常表示身份验证成功了。此处可以配置多个 Realm,将按照相应的顺序及策略进行访问。

授权流程

img

流程如下:

  1. 首先调用 Subject.isPermitted/hasRole接口,其会委托给 SecurityManager,而 SecurityManager 接着会委托给 Authorizer;
  2. Authorizer 是真正的授权者,如果我们调用如 isPermitted(“user:view”),其首先会通过 PermissionResolver 把字符串转换成相应的 Permission 实例;
  3. 在进行授权之前,其会调用相应的 Realm 获取 Subject 相应的角色/权限用于匹配传入的角色/权限;
  4. Authorizer 会判断 Realm 的角色/权限是否和传入的匹配,如果有多个 Realm,会委托给 ModularRealmAuthorizer 进行循环判断,如果匹配如 isPermitted/hasRole 会返回 true,否则返回 false 表示授权失败。

ModularRealmAuthorizer 进行多 Realm 匹配流程:

如果 Realm 进行授权的话,应该继承 AuthorizingRealm,其流程是:

标签:调用,Realm,SecurityManager,身份验证,初识,shiro,Shiro,Subject
来源: https://www.cnblogs.com/wuzhixuan/p/15459598.html