Shiro系列-Shiro简介

简单介绍
  对于Shiro来讲不只可使用到JavaSE的开发中,还可使用到JavaEE的开发中,Shiro能够完成的工做有。认证、受权、加密、会话管理、与Web的集成、缓存等等操做,在SpringBoot使用前端框架的时候就整合了Shiro而且与Thymeleaf整合的也是很是好。
  下面就是关于Shiro简单的功能架构图前端

Authentication 身份认证/登陆,验证用户是否是拥有相应的身份。
Authorization 受权,权限验证,验证某个已经认证的用户是否有某个权限,也就是判断用户是否能作什么样的事情。例如验证用户是不是某个角色
Session Manager 会话管理,也就是用户登陆后就是一次会话,在没有退出以前,它的全部信息都在会话中,会话能够是普通的JavaSE会话,也能够是Web会话。
Cryptography 加密,保护数据的安全性,例如密码加密存储到数据库,而不是经过明文存储
Web Support Web支持,能够很容易的集成到Web环境中。
Caching 缓存,例如用户登陆以后,其用户信息、用户角色权限等都不须要每次都进行查询。这样能够提升效率
Concurrency Shiro 支持多线程应用并发验证,即在一个线程中开启另外一个线程能把权限自动传播过去;
Testing 提供测试支持
Run As 容许一个用户假装成为另外一个用户进行访问
Remember Me 记住我。下次登陆的时候不用登陆数据库

注意
  Shiro 不会维护用户、维护权限;这些都是须要经过用户设计来实现,而后经过对应的方式注入到Shiro中便可。缓存

Shiro工做流安全

  从上图能够看出来,与应用程序代码直接交互的是Subject对象,也就是说Shiro对外的API核心的内容就是Subject,下面就来介绍一下整个交互过程当中的各个API含义前端框架

Subject:主体,表明当前用户,这里的用户并非指具体的人,与当前应用交互的任何的东西都是Subject,例如客户端等等,也就是说这个是一个抽象的概念,全部的Subject都绑定到一个SecurityManager,与Subject的全部交互都要委托到SecurityManager;能够把Subject看作是一个代理,真正的执行者是SecurityManager。
SecurityManager:安全管理器;也就是是全部跟安全相关的操做都会与SecurityManager进行交互。而且他还管理全部的Subject,能够看出它才是真正的Shiro的核心,负责与后面要介绍的其余组件进行交互。也就是相似于SpringMVC中的DispacherSevlet前端控制器
Realm 域,Shiro从Realm获取安全数据例如用户、角色、权限等等,也就是说Security Manager要验证用户身份,那么他须要从Realm获取相应的用户进行比较肯定用户身份是否合法。也须要从Realm中获得用户相应的角色权限验证用户是否能进行操做;能够把Realm当作是一个DataSource,也就是一个相似于安全数据源。服务器

也就是说,Shiro不提供用户权限,可是经过Realm进行维护多线程

Shiro内部架构架构

  从图中能够看到全部的应用于Shiro交互都是经过Subject来实现的。并发

Subject:主体,任何应用交互的抽象用户
SecurityManager:相似于SpringMVC中的DispatchServlet,是Shiro中的核心内容,全部的操做都是经过SecurityManager进行的控制,管理这全部的Subject、而且负责认证受权会话管理等等。
Authenticator:认证器,负责主体的认证,这个是扩展点,若是开发者以为Shiro默认的很差用,也能够本身实现本身的认证策略,也就是在什么样的状况下才算是用户认证经过。
Authrizer:受权器,或者是访问控制器,用来决定主体是否有权限进行相应的操做;也就是控制用户能访问应用中的哪些功能。
Realm:能够有一个也能够有多个,安全实体数据源,也就是经过这个获取到一个安全的实体。可使用JDBC实现,能够是LDAP实现,或者是经过内存实现等等,是由开发者提供。可是须要注意的一点是Shiro并不知道用户权限是以哪一种格式进行存储的。因此在开发中一般是使用本身的自定义的来进行控制。
SessionManager:在Servlet中,Session是一个重要的概念,而Shiro中对于Session的管理就是经过SessionManager进行管理,Shiro不只仅能够用在Web环境中,也可使用到非Web环境的JavaSE中,因此,Shiro抽象了一个Session来管理主体与应用之间的数据交互,这样的话,例如在一个Web环境中使用了是Web服务器可是在其余客户端中使用的就不是Web服务器,这就致使一个问题Session放到哪里,这里推荐使用的是Memcached也就是进行缓存操做。利用分布式操做将Session存到一个统一的地方,全部的服务器都从同一个地方获取Session的数据。
Session DAO:对于Dao,做为数据访问对象,用于会话的CRUD操做,例如将Session缓存到Redis中或者是Memcached中,都是经过SessionDAO来实现高可用的操做。
CacheManager:缓存控制器,来管理用户、角色、权限等缓存操做,由于这些数据都是不多去改变的东西,因此放到缓存中用来提升性能。
Cryptography:密码模块,Shiro提升安全性能的密码的加解密操做。框架

总结   做为Shiro一个经常使用的安全框架, shiro 应用实例 www.1b23.com,虽然功能呢没有SpringSecurity那么强大,可是小巧,灵活性较高,在使用的过程当中能够实现一些自定义的特殊功能。上面简单的学习了在Shiro常用到的组件。后面的分享学习中还会有更多的精彩。  

相关文章
相关标签/搜索