Shiro相关知识

1、Shiro功能概述

Apache Shiro是一个功能强大且易于使用的 Java 安全框架,可执行身份验证、授权、加密和会话管理。

主要功能:

  • Authentication:身份认证。登录时验证身份信息。
  • Authorization:授权操作。访问控制的过程,即确定“谁”有权访问“什么”。
  • SessionManager:会话管理。这的Session并不是我们的HttpSession。
  • Cryptography:加密。使用加密算法确保数据安全。

扩展功能:

  • Web Suppot:对于Web的支持,可以更简易的集成 Web 项目。
  • Caching:缓存。登录授权后,把用户信息缓存起来,这样就不用每次都去数据库中查询,提高效率。
  • Concurrency:并发性。通过其并发功能支持多线程应用程序。
  • Testing:支持测试。
  • Run As:允许用户采用其他用户的标识(如果允许)的功能。 
  • Remember Me:记住用户跨会话的身份,只需要在强制登录时登录。

2、Shiro的三大核心

掌握核心点对使用Shiro有很大的帮助:

整个流程就是:应用代码通过 Subject 来进行认证和授权,而 Subject 又委托给 SecurityManager;我们需要给 Shiro 的 SecurityManager 注入 Realm,从而让 SecurityManager 能得到合法的用户及其权限进行判断。

Subject:主体,代表了当前 “用户”,这个“用户”是一个抽象的概念,它也可以是第三方程序,大体理解为任何与系统交互的“东西”都可以称为Subject。所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者;

SecurityManager:安全管理器;它管理着所有 Subject;可以看出它是 Shiro 的核心,它负责与后边介绍的其他组件进行交互,如果学习过 SpringMVC,你可以把它看成 DispatcherServlet 前端控制器;

Realm:领域,Shiro 从Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色 / 权限进行验证用户是否能进行操作。

3、RBAC的概念

RBAC(Role-Based Access Control)就是基于角色的访问控制。三要素就是用户、角色、权限,概括来说就是用户拥有什么角色,这些角色被分配了哪些操作权限。后续案例中其实是最简单的一种数据模型,实际项目中还会存在部门、用户组啥的。

4、身份认证流程

大体看一下流程有助于我们后续搭建项目。

  1. 应用程序代码调用 Subject.login(token) 方法,这里要传入AuthenticationToken 。
  2. 将 Subject 实例委托给应用程序的 SecurityManager,实际身份验证工作开始
  3. 委托给封装的验证器进行身份验证。authenticator.authenticate(token)
  4. 通过回调AuthenticationStrategy来执行多域身份验证尝试,需要注意的是只要一个Realm时是不需要这个的
  5. 从图中可以看到我们可以Custom Realm(自定义Realm),将传入的AuthenticationToken和Realm匹配,成功匹配后会创建一个subject实例。

5、授权流程

  1. 当调用subject.hashRole*/checkRole*/isPermitted*/checkPermission*方法,传入相应参数。
  2. 仍然委托给Security Manager
  3. SecurityManager通过Authorizer的hashRole*/checkRole*/isPermitted*/checkPermission*方法验证是否拥有角色或资源
  4. Authorizer类hasRole方法内通过AuthorizingRealm的getAuthorizationInfo获取角色信息,AuthorizingRealm最后通过调用子类的doGetAuthrizationInfo获取用户角色集合,在通过集合的contains方法判断角色。】

大体意思也就是最后它会去我们自定义Realm中查找subject拥有的角色或资源是否包括传入的参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoneWalker、

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值