Apache Shiro简介

Apache Shiro简介

一、Apache Shiro是什么,用来干什么的?

1、Apache Shiro介绍

在Apache Shiro (http://shiro.apache.org/what-is-shiro.html)英文介绍中,有以下三个方面的介绍。

  • Apache Shiro is an application security framework :Apache Shiro是一种应用的安全框架
  • It provides application developers very clean and simple ways of supporting:它为应用开发者提供简单而便捷的支持
  • four cornerstones of security in their applications: authentication, authorization, enterprise session management and cryptography:它最重要的有4个方面的安全机制:认证、授权、加密、和会话管理。

由上述可知,我们可以知道Apache Shiro是一种简介易懂的Java安全框架,给开发者提供了认证、授权、加密、会话管理四个方面的功能,相比较Spring security而言,它提供了更加简便的认证与授权技术。

2、Apache Shiro功能

这里写图片描述

  • Authentication:用户认证,验证用户是否拥有相应的身份,才能继续执行相应权限进行的操作。

  • Session Mananger:会话管理,就是Session会话的功能,用于存放一次会话中的信息,在会话结束之前都会存在。

  • Cryptography:加密,即对操作的数据进行加密,如:对用户的登录密码进行加密存储到DB中。

  • Web Supporting:Shiro提供Web支持,可以集成Web环境

  • Caching:就是缓存机制,用户登录页面以后的很多信息都不用再次输入,都会在缓存中。

  • Concurrency:Shiro提供了支持多线程的并发验证,提高了验证效率

  • Testing: Shiro同样提供测试支持。

  • Run As:可以允许用户伪装成另外一个用户的身份进行访问。

  • Remerber Me:登录页面中的记住帐号密码,下次就不用再键入。

二、Apache Shiro的核心组件

1.Shiro核心组件

  • Subject: 主体表示当前的用户(用户是一个抽象的概念,并不是指人)或者当前的操作(与当前应用交互的东西就是Subject),这里的Subject最主要还是委托给SecurityManager,SecurityManager才是最重要的幕后执行者。Subject相当于只是个负责对接的人。

  • SecurityMannger: 安全管理器用于管理所有的Subject,是Shiro的核心。类似于SpringMVC的DispatcherServlet前端控制器。

  • Realm: ,通俗点来说就是一个数据源,主要存放用来比较的用户身份、用户、角色、权限等安全数据。当SecurityMannger需要验证身份时,它就从Realm中获取对应的用户进行比较得出是否合法的结果,也需要从Realm得到用户相应的角色、权限验证得到能否进行操作的结果。

2.Shiro工作流程

这里写图片描述

由流程图我们可以总结为:当应用代码需要通过Subject授权,之后Subject委托给SecurityManager,SecurityManager将管理Subject,然后要从Realm中获取安全数据源(用户、角色、权限等)来与当前用户相比较。进行用户的合法性判断跟权限的判断。

三、Apache Shiro架构

这里写图片描述

在架构图中有些上面已经有了介绍,下面主要是上述未涉及介绍:

(1)Subject主体Subject会委托给SecurityManager管理。主体可以是Java、Python、PHP、C/C++、.NET等应用代码

(2)SecurityManager安全管理器。除了管理Subject之外,还会负责着认证、授权、会话、缓存的管理

(3)Authenticator认证器主要负责认证主体Subject,用户还可以通过它进行自定义实现,这时要配合认证策略(Authentication Strategy)进行认证,让什么情况下的用户通过认证。

(4)Authrizer授权器(访问控制器)决定主体Subject用户对某些应用能否进行相应的某些操作,访问某些应用,即可以理解为让一个人能不能有权限去管理某事。

(5)Realm域(安全实体数据源)存放用户的权限、角色等的信息,可以是一个Realm也可以是多个Realm。可以是JDBC实现,也可以是LDAP实现。这里需要特别注意的就是Shiro不知道我们用户是以何种格式存储,存储在哪里的,所以我们通常都会在应用中自己实现Realm。

(6)SessionManager会话管理,Session都是有声明周期的,一般默认的是30分钟,那么是哪个用来管理Session生命周期呢?就是SessionMananger。另外,还有注意一点,就是Shiro不依赖任何框架,不管是JavaSE还是JavaEE,都可以实现,这时候它就可以抽象一个Session来管理主体与应用交互过程中产生的数据,实现分布式的会话

(7)SessionDAO数据库Dao会话,我们可以将Session中的数据信息通过JDBC方式放入到数据库中,然后我们就可以实现自己的SessionDAO。提高性能,起到缓存的作用

(8)CacheManager缓存控制器,来管理如用户、角色、权限等的缓存的,可以提高访问效率及性能。

(9)Cryptography加密模块对交互中的重要信息进行加密/解密等。

参考资料:

http://jinnianshilongnian.iteye.com/blog/2018936/
http://shiro.apache.org/reference.html

猜你喜欢

转载自blog.csdn.net/mynewclass/article/details/78480270