《权力与纷争-Shiro》-Know your own weapons

前言:这次写有关Shiro框架的一系列博客,为自己加油吧!


Shiro是什么?


            Shiro是一个权限框架,实现系统权限的控制,如同一个系统登录,管理员能控制什么,使用什么资源(资源可以是某个按钮,菜单,功能),而用户登录后能使用什么资源。

            Shiro主要有认证,授权,加密,会话管理这几块,而且Shiro框架不仅BS试用,CS项目也可以使用Shiro框架,是一款非常优秀的权限框界面。


            类似的有Spring 的Security,也是权限框架,不过比较依赖Spring,但是有人说Security比Shiro要强大,Shiro比较灵活。


Shiro能干什么?(功能点)

《权力与纷争-Shiro》-Know your own weapons_第1张图片


Primary Concerns(主要功能)


Authentication :身份验证/登录,验证用户的身份。
Authorization:授权,权限认证,确定用户能干什么,不能干什么。
SessionManager :会话管理,用户登录一次就是一次会话,没有退出前,他的所有信息都在会话中。
Cryptography:加密,保护数据安全性,比对密文而不是铭文。


Supporting Features(支撑功能)


Web support:web支持,容易集成到web环境
Caching:缓存,保存角色,权限信息,不用每次都去查


Concurrency:多线程应用并发,一个线程中开启另一个线程,能把权限传播过去
Testing:测试支持
Run As :允许一个用户假装一个用户进行访问

Remember Me :记住我,登陆一次,下次再来不用登陆



Shrio 不回去维护用户,维护权限,这些我们自己去做,然后通过接口注入给Shiro


Shiro长得咋样?


《权力与纷争-Shiro》-Know your own weapons_第2张图片


Application code(应用程序代码调用的都是Subject),可以看出Subject是对外API的核心。


Subject:

           主体,代表了当前用户,用户不一定是具体的人,也可以是与之交互的任何东西,如网络爬虫,机器人等=  =,所有的Subject都绑定到SecurityManager,Subjecj就是一个门面,SecurityManager 才是实际的执行者,这是一个慈禧与光绪的故事....


SecurityManager :

           安全管理器,所有相关操作都会与SecurityManager 交互,且她管着所有Subject,可以看出他是Shiro的核心,负责与其他组件的交互,类似于SpringMVC的DispatcherServlet。


Realm:

            域,Shiro从Realm获取安全数据(用户,角色,权限)SecurityManager 从Realm里验证用户的身份是否合发,这个由我们实现的。


简单应用Shiro基本要

            1 代码调用Subject来进行授权认证,而Subject 委托给SecurityManager。

           2 给SecurityManager注入Realm,让SecurityManager对用户和权限进行判断。


Shiro的架构

《权力与纷争-Shiro》-Know your own weapons_第3张图片


最上面一行,说的是可以通过

          C++,C#编程语言,PHP,Ruby脚本语言,Felx,Silvelight 前端技术,WebMVC前端框架,最后是其他独立程序,这些都通过使用Subject用户。


Subject :主体,可以看到主体可以是任何可以与应用交互的“用户”;


SecurityManager :  

           相 当 于 SpringMVC 中 的 DispatcherServlet 或 者 Struts2 中 的FilterDispatcher;是 Shiro 的心脏;所有具体的交互都通过 SecurityManager 进行控制;它管理着所有 Subject、且负责进行认证和授权、及会话、缓存的管理。


Authenticator :

            认证器,负责主体认证的,这是一个扩展点,如果用户觉得 Shiro 默认的不好,可以自定义实现;其需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了;


Authrizer:

            授权器,或者访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能;


Realm :

            可以有 1 个或多个 Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是 JDBC 实现,也可以是 LDAP 实现,或者内存实现等等;不知道你的用户/权限存储在哪及以何种格式存储;所以我们一般在应用中都需要实现自己的 Realm;


SessionManager :

            如果写过 Servlet 就应该知道 Session 的概念,Session 呢需要有人去管理它的生命周期,这个组件就是 SessionManager;而 Shiro 并不仅仅可以用在 Web 环境,也可以用在如普通的 JavaSE 环境、EJB 等环境;所有呢,Shiro 就抽象了一个自己的 Session来管理主体与应用之间交互的数据;这样的话,比如我们在 Web 环境用,刚开始是一台Web 服务器;接着又上了台 EJB 服务器;这时想把两台服务器的会话数据放到一个地方,这个时候就可以实现自己的分布式会话(如把数据放到 Memcached 服务器);


SessionDAO: 

             DAO 大家都用过, 数据访问对象, 用于会话的 CRUD, 比如我们想把 Session保存到数据库,那么可以实现自己的 SessionDAO,通过如 JDBC 写到数据库;比如想把Session 放到 Memcached 中,可以实现自己的 Memcached SessionDAO;另外 SessionDAO中可以使用 Cache 进行缓存,以提高性能;


CacheManager:

             缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能


Cryptography :密码模块,Shiro 提高了一些常见的加密组件用于如密码加密/解密的。

最后一行是数据。



简单的介绍就到这了,下次给大家来个简单例子哈!



————————————————————chenchen——————————————————————


你可能感兴趣的:(------Shiro)