个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~
Apache Shiro 是一个功能强大且灵活的开源安全框架,可以干净地处理身份验证,授权,企业会话 Management 和加密。
Shiro功能模块:
Shiro 的目标是 Shiro 开发团队所说的“应用程序安全的四大基石”——身份验证、授权、会话管理和加密:
在不同的应用程序环境中,还有一些其他功能来支持和加强这些问题,特别是:
Web 支持(Web Support)
:Shiro 的 Web 支持 API 有助于轻松保护 Web 应用程序。缓存(Caching)
:缓存是 Apache Shiro API 中的一线公民,可确保安全操作保持快速高效。并发(Concurrency)
:Apache Shiro 通过其并发功能支持多线程应用程序。测试(Testing)
:测试支持可帮助您编写单元和集成测试,并确保您的代码按预期受到保护。“Run As”
:允许用户采用其他用户的身份(如果允许)的功能,有时在管理方案中很有用。“Remember Me”
:记住用户在会话中的身份,因此他们只需要在强制登录时登录。Shiro安全框架 外部架构
:
从应用程序角度来看:
Subject
:应用代码直接交互的对象是Subject ,也就是说Shiro的对外API核心就是Subject。Subject代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫、机器人等。与Subject的所有交互都会委托给SecurityManager,Subject其实是一个门面,SecurityManager才是实际的执行者;
SecurityManager
:即安全管理器 ;所有与安全有关的操作都会与SecurityManager交互,且其管理着所有Subject。可以看出它是Shiro的核心 ,它负责与Shiro的其他组件进行交互,它相当于SpringMVC中DispatcherServlet的角色
Realm
:Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法。也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作。可以把Realm看成DataSource。
Shiro安全框架 内部架构
:
Subject
:任何可以与应用交互的“用户”。Security Manager
:Shiro 的核心,所有具体的交互都通过 SecurityManager 进行控制;它管理着所有 Subject、且负责进行认证、授权、会话及缓存的管理。Authenticator
:负责 Subject 认证,是一个扩展点,可以自定义实现;可以使用认证策略(Authentication Strategy),即什么情况下判定用户认证通过。Authorizer
:授权器、即访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能;Realm
:可以有 1 个或多个 Realm,可以认为为安全实体数据源,用于获取安全实体;可以是 JDBC 实现,也可以是内存实现等等;由用户提供,所以一般在应用中都需要实现自己的 Realm;SessionManager
:管理Session声明周期的组件,通过Shiro框架的这一模块,开发者可在任何应用或架构层一致地使用Session API;CacheManager
:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少改变,放到缓存中后可以提高访问的性能;Cryptography
:密码模块,提供了一些常见的加密组件用于如密码加密/解密。