shiro 的确是个很简单的安全框架,是个很好的轮子,重复造轮子是可耻的,所以就好好学习如何使用和扩展轮子,发挥它的价值。
shiro 的是干嘛的(引用官网)
Apache Shiro是一个强大而灵活的开源安全框架,可以干净地处理身份验证,授权,企业会话管理和加密。
以下是Apache Shiro可以做的一些事情:
-
验证用户验证他们的身份
-
为用户执行访问控制,如:
- 确定用户是否被分配了一定的安全角色
- 确定用户是否被允许做某事
-
在任何环境中使用Session API,即使没有Web或EJB容器。
-
在身份验证,访问控制或会话生命周期内对事件作出反应。
-
聚合1个或更多的用户安全数据数据源,并将其全部显示为单个复合用户视图。
-
启用单点登录(SSO)功能
-
为用户关联启用“记住我”服务,无需登录
Shiro尝试为所有应用程序环境(从最简单的命令行应用程序到最大的企业应用程序)实现这些目标,而不强制依赖于其他第三方框架,容器或应用程序服务器。
当然,该项目旨在尽可能地融入这些环境,但它可以在任何环境中开箱即用。
shiro 功能(引用官方)
image.pngShiro针对Shiro开发团队所称的“应用程序安全的四个基石” - 认证,授权,会话管理和加密:
认证(Authentication):登录,证明用户是谁的行为。
授权(Authorization):访问控制的过程,即确定“谁可以访问”什么“。
会话管理(Session Management):即使在非Web或EJB应用程序中也可以管理用户特定的会话。
密码学(Cryptography):使用加密算法保持数据安全性,同时易于使用。
核心架构
image.png- Subject:与系统交互的实体,可以使用户,也可以是其他子系统。
- SecurityManager:是 shiro 的核心,包裹住所有服务,相当于大容器,协调这些服务一起工作。
- Authenticator :用户认证。
- Authentication Strategy :认证策略,如果配置多个 realm,用这个管理。
- Authorizer:权限认证。
- SessionManager:回话管理。
- SessionDAO :会话管理的 dao,负责操作。
- CacheManager:缓存管理。
- Cryptography :密码,各种加密操作。
- Realms :Shiro与应用程序的安全数据之间的“桥”或“连接器”,这里是负责验证密码和权限的入口。
工作流程
image.png大致的工作流程是这样的:
- 调用登录方法
- 通过SecurityManager进入 realm 中进行判断权限和登录认证
- 在 realm 中调用dao 层查询数据库
- 获取用户数据
- realm 包装原始数据传入SecurityManager。通过SecurityManager调用认证方法,根据login 传入的 token 和 realm 返回的用户真实数据进行比对是否正确。如果不正确抛出各种异常,比如未知用户异常,密码错误,登录次数过多异常等。
- 根据返回的异常,各种 try..catch..,没有异常返回,则表示登录成功,反之返回前端 catch 结果。
自学笔记,如果错误,请评论指正